leetcode_19_Remove Nth Node From End of List (easy)
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.
解体:
应该再一次循环,但是不知道链表总共多少数据
简单的两次循环,但如何才能预知未来>_<
(提示:英文翻译错误,哎,我的英文是体育老师教的)
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *now = head;
int i = 0;
for(;now!=NULL;now = now->next){
i++;
}
if(n>i){
return NULL;
}
if(n==i){
return head->next;
}
int j = 0;
for(now=head;now!=NULL;now = now->next){
j++;
if(j == i-n){
ListNode *next = now->next->next;
delete now->next;
now->next = next;
break;
}
}
return head;
}
};
void printList(ListNode *head){
ListNode *now = head;
for(;now!=NULL;now = now->next){
cout<<now->val<<"->";
}
}
int main(int argc, const char * argv[]) {
ListNode *head = (ListNode *)malloc(sizeof(ListNode));
head->val = 1;
head->next = NULL;
ListNode *now = head;
for(int i=2;i<6;i++){
ListNode *next = (ListNode *)malloc(sizeof(ListNode));
next->val = i;
next->next = NULL;
now->next = next;
now = next;
}
cout<<"before"<<endl;
printList(head);
cout<<endl;
Solution a;
ListNode *final = a.removeNthFromEnd(head, 2);
cout<<"after"<<endl;
printList(final);
return 0;
}
什么,尽然过了,what