19. Remove Nth Node From End of List
Medium
2066155FavoriteShare
Given a linked list, remove the n-th node from the end of list and return its head.
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.
Follow up:
Could you do this in one pass?
Accepted
436,906
Submissions
1,265,550
#include <iostream>
#include <stdlib.h>
#include <stdlib.h>
using namespace std;
/*
* Definition for singly-linked list.
*/
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
// 1 -> 2 -> NULL
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
n = n + 1;
if(head==NULL)
return NULL;
ListNode * p1 = head;
ListNode * p2 = head;
int i = 1;
while(p1!=NULL){
p1 = p1->next;
if(i>n){
p2 = p2->next;
}
i++;
}
/* n与长度相等,则删除头节点*/
if(i==n){
head = head->next;
return head;
}
ListNode *p3 = p2->next;
if(p3==NULL)
return NULL;
ListNode *p4 = p3->next;
p3->next = NULL;
p2->next = p4;
delete(p3);
return head;
}
};
int main(){
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
ListNode* phead = NULL;
for(int i=10;i>=1;i--){
ListNode *ptemp =(ListNode*)malloc(sizeof(ListNode));
ptemp->val = i;
ptemp->next = phead;
phead = ptemp;
}
Solution *pso = new Solution();
ListNode * ret_node = pso->removeNthFromEnd(phead,5);
while(ret_node!=NULL){
cout<<ret_node->val<<endl;
ret_node = ret_node->next;
}
system("pause");
return 0;
}