LeetCode19 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
//章节 - 链表 //二、双指针技巧 //4.删除链表的倒数第N个节点 /* 算法思想: 利用双指针,p指针先移动n位,然后p,q指针一起移动。当p到达尾结点时,q即到达倒数第那个节点,然后删除即可。 */ //算法实现: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode * removeNthFromEnd(ListNode* head, int n) { ListNode *dummy=new ListNode(0); //这很重要,添加一个头指针,解决只有一个元素的情况 dummy->next=head; ListNode *p = dummy; //第一个操作指针,将其后移n个位置后才移动第二个操作指针 ListNode *q = dummy; //第二个操作指针 for(int i=0;i<n;++i) p = p->next; while (p&&p->next) { p = p->next; q = q->next; } ListNode * temp = q->next; q->next = q->next->next; delete temp; return dummy->next; } };