给定一个链表,删除链表的倒数第 n n n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n n n 保证是有效的。
解: n e w new new一个新头节点指向当前头节点 h e a d head head,然后让一个指针从新头节点出发走 n + 1 n+1 n+1步,再让另一个指针与该指针一同走,当前指针走到链表为空时,后指针刚好走到要删除的节点前一个;然后再删除该节点,返回原头节点
/**
* 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* pHead = new ListNode(0);
pHead->next = head;
ListNode* p = pHead;
ListNode* q = pHead;
for (int i = 0; i <= n; ++i)
p = p->next;
while (p){
p = p->next;
q = q->next;
}
q->next = q->next->next;
return pHead->next;
}
};