[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;
}
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;
}
相关文章推荐
- leetcode: Remove Nth Node From End of List
- [Leetcode19] Remove Nth Node From End of List
- Remove Nth Node From End of List_Leetcode_#19
- leetcode-19 Remove Nth Node From End of List
- [LeetCode] Remove Nth Node From End of List 解题报告
- Leetcode-Remove Nth Node From End of List
- leetcode--19. Remove Nth Node From End of List
- leetcode--19. Remove Nth Node From End of List
- [LeetCode]Remove Nth Node From End of List
- 【LeetCode】19. Remove Nth Node From End of List
- [Leetcode]19. Remove Nth Node From End of List
- leetcode: Remove Nth Node From End of List
- leetCode(9):Remove Nth Node From End of List
- leetcode[19]Remove Nth Node From End of List
- [LeetCode] Remove Nth Node From End of List
- leetcode 19: Remove Nth Node From End of List
- Leetcode(16) - Remove Nth Node From End of List
- [leetcode 19] Remove Nth Node From End of List
- [LeetCode] 19. Remove Nth Node From End of List ☆
- 【LeetCode】19 Remove Nth Node From End of List (c++实现)