题目来源:
leetcode
题目:给一个链表,删除倒数N个节点:
Given linked list: 1->2->3->4->5, and n = 2.
After removing the second node from the end, the linked list becomes 1->2->3->5.
解析:
这个题很经典,做多了就很简单。
两个指针,一个指针先走N-1步,接着后指针,一起走。当先指针到头的时候,后指针即在倒数第N个节点上。
此时把第N个节点删去即可。用到了纸向指针的指针,后指针是一个地址指针,这样不改变原链表地址,方便返回head;
代码:
/**
* 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**p = &head,*q = head;
for(int i = 1;i<n;i++)
{
q =q->next;
}
while(q->next!=NULL)
{
q = q->next;
p = &((*p)->next);
}
*p = (*p)->next;
return head;
}
};