
Remove Nth Node From End of List
Given a linked list, remove the nth node 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.
//方法:测试Accepted
//算法:
//1 准备两个指针first, second
//2 先让fisrt走n步
//3 让fisrt和second同时走直到first遇到结尾
//4 要用一个temp指针来记录second前一个node,用来删除second用。
class Solution {
public:
ListNode *removeNthFromEnd(ListNode *head, int n) {
ListNode *first=head , *second=head;
ListNode *temp=second;
for(int i=0; i<n; i++)
first = first->next;
while(first)
{
first=first->next;
temp = second;
second=second->next;
}
if(second == head)
head = head->next;
else
temp->next = second->next;
return head;
}
};
//算法:
//1 准备两个指针first, second
//2 先让fisrt走n步
//3 让fisrt和second同时走直到first遇到结尾
//4 要用一个temp指针来记录second前一个node,用来删除second用。
#include<iostream>
using namespace std;
#define N 5
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode *removeNthFromEnd(ListNode *head, int n) {
ListNode *first=head , *second=head;
ListNode *temp=second;
for(int i=0; i<n; i++)
first = first->next;
while(first)
{
first=first->next;
temp = second;
second=second->next;
}
if(second == head)
head = head->next;
else
temp->next = second->next;
return head;
}
};
ListNode *creatlist()
{
ListNode *head;
head=NULL;
for(int i=0; i<N; i++)
{
int a;
ListNode *p;
cin>>a;
p = (ListNode*)malloc(sizeof(ListNode));
p->val=a;
p->next=head;
head = p;
}
return head;
}
int main()
{
ListNode *list=creatlist();
ListNode *outlist;
Solution lin;
outlist=lin.removeNthFromEnd( list,2 );
for(int i=0; i<N; i++)
{
cout<<outlist->val;
outlist = outlist->next;
}
}
leetcode_19_Remove Nth Node From End of List
原文地址:http://blog.csdn.net/keyyuanxin/article/details/43791951