#include <iostream>
#include <vector>
#include<algorithm>
#include <queue>
using namespace std;
/************************************************************************/
/*
Problem:
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.
Author : crazys_popcorn@126.com
DateTime: 2017年8月9日 13:28:52
*/
/************************************************************************/
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if (head == NULL )
return head;
ListNode *current = NULL;
ListNode *frist = head;
ListNode *second = head;
//n需要见 -1 记录出当前的前一个位置。以便于获取指针
for (int i = 0; i < n-1; i++)
{
second = second->next;
}
while (second->next)
{
current = frist; //记录前一个指针
frist = frist->next;
second = second->next;
}
if (current == nullptr)
{
head = frist->next;
delete frist;
}
else
{
//衔接。删除frist 并把 frist 的下一级衔接到 frist的上一级
current->next = frist->next;
delete frist;
}
return head;
}
};
void main()
{
ListNode *t1 = new ListNode(0);
ListNode *t2 = new ListNode(0);
ListNode *t3 = new ListNode(0);
ListNode *t4 = new ListNode(0);
t1->val = 1;
t2->val = 2;
t3->val = 3;
t4->val = 4;
t1->next = t2;
t2->next = t3;
t3->next = t4;
Solution s1;
s1.removeNthFromEnd(t1, 2);
system("pause");
return ;
}
LeetCode Remove Nth Node From End of List C++
最新推荐文章于 2020-06-19 22:40:41 发布