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

[leetcode]Remove Nth Node From End of List

2015-05-07 20:27 316 查看
代码写的很挫,交了挺多次。以后写代码 一定要先把左右的情况 都考虑清楚 再考虑敲代码。哎

public ListNode removeNthFromEnd(ListNode head, int n) {

ListNode thead=head,nhead=head;

if(head==null)

return head;



int i=0;

while(head.next!=null){

head=head.next;

i++;

if(i>n)

nhead=nhead.next;

}

if(i==0)//判断就一个节点的情况

return null;

else if(n==1)//判断移除最后一个节点的情况

nhead.next=null;

else if(i==n-1)//判断移除第一个节点的情况

return nhead.next;

else

nhead.next=nhead.next.next;

return thead;

}

别人的文章:

思路:

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

[cpp] view
plaincopy

#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;

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