您的位置:首页 > Web前端 > Node.js

Remove Nth Node From End of List

2014-09-11 19:58 344 查看
Given a linked list, remove the nthnode from the end of list and return its head.

For example, 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.

Note:

Given n will always be valid.

Try to do this in one pass.

思路:

两个指针,p先走n步,然后q开始走。当p走到末尾时,q正好到了待删除节点。

#include <iostream>
using namespace std;
struct LinkNode
{
int data;
LinkNode *next;
LinkNode(int x):data(x),next(NULL){}
};

LinkNode * removeNthNodeFromEnd(LinkNode *head,int n)
{
if(head == NULL || n == 0)//防御性编程,增加健壮性
return head;
LinkNode *dummy = new LinkNode(-1);
dummy->next = head;
LinkNode *p,*q,*tmp;
p = dummy;
q = dummy;

//p先走n步
for(int i=0;i<n;i++)
{
if(p->next != NULL)
p = p->next;
else
return head;//如果n超过链表的长度,直接返回head
}

//然后p,q一起走
while(p->next)
{
p = p->next;
q = q->next;
}

//此时q指向的是待删除节点的前驱
tmp = q->next->next;
delete q->next;
q->next = tmp;

head = dummy->next;
delete dummy;
return head;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: