Description
带虚拟头结点的单链表结点结构如下:
struct ListNode
{
int data;
ListNode *next;
};
链表类接口如下:
class List
{
public:
List()
{
head = new ListNode;
head->next = NULL;
}
~List()
{
ListNode* curNode;
while( head->next )
{
curNode = head->next;
head->next = curNode->next;
delete curNode;
}
delete head;
}
//在链表第pos(pos>0)个结点之前插入新结点,新结点值为toadd
//链表实际结点从1开始计数。
//调用时需保证pos小等于链表实际结点数
void insert(int toadd, int pos)
//删除链表的第pos(pos>0)个结点
//链表实际结点从1开始计数。
//调用时需保证pos小等于链表实际结点数
void remove(int pos);
// Data field
ListNode *head; //head指向虚拟头结点,head-next指向第一个实际结点
};
请实现如下函数:
void List::remove(int pos)
只提交remove函数实现,不要提交类定义及main函数。
参考答案
ListNode* getNode(ListNode *head,int pos){
ListNode* node = head;
for(int i = 0; i < pos; ++i){
node = node->next;
}
return node;
}
void List::remove(int pos){
ListNode* prev_node = getNode(head,pos-1);
ListNode * node = prev_node->next;
ListNode * next_node = node->next;
prev_node->next = next_node;
delete node ;
}