1,删除链表节点时,删除头节点和其他节点的操作不一样,为了统一删除节点的操作,增加虚拟头节点将大大简化操作。
2,双指针对于处理数组和链表的问题较为方便和快捷。
#include <iostream>
using namespace std;
struct link_list{
int data;
link_list * next;
link_list(int val = 0,link_list * ptr = nullptr):data(val),next(ptr){}
};
class Solution{
public:
link_list * deleteReindexNode(link_list * head,int index){
link_list * pre_head = new link_list (INT16_MAX);
pre_head->next = head;
link_list * slow = pre_head;
link_list * fast = slow;
while(index--){
fast = fast->next;
}
while(fast->next){
slow = slow->next;
fast = fast->next;
}
slow->next = slow->next->next;
return pre_head->next;
}
};
int main()
{
link_list * head = new link_list (1);
head = new link_list (2,head);
head = new link_list (3,head);
head = new link_list (4,head);
Solution solution;
link_list * cur_list = solution.deleteReindexNode(head,1);
return 0;
}