# LeetCode第19题之 Remove Nth Node From End of List

120人阅读 评论(0)

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>
#include <vector>
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) {
//如果为空链表
{
}
//如果链表只有一个节点，且n为1
if (NULL == head->next && 1 == n)
{
return NULL;
}
--n;
while (n>0 && ptr)
{
ptr = ptr->next;
--n;
}
//ptr不为NULL，则存在第n个节点,且此时ptr指向第n个节点
if (ptr != NULL)
{
//这种情况表示待删除的节点为头节点
if (ptr->next == NULL)
{
delete tmp;
}
else
{
ListNode * pre = NULL;
//curr指针所指的节点到ptr指针所指的节点相距n个节点，将ptr移到指向最后一个节点时，此时curr节点指向倒数第n个节点
while(NULL != ptr->next)
{
ptr = ptr->next;
pre = curr;
curr = curr->next;
}
//此时curr指向倒数第n个节点，pre指向待删除节点的前一个节点
pre->next = curr->next;
delete curr;
}
}
}
};
int main()
{
ListNode * p = (ListNode*)malloc(sizeof(ListNode));
p->val = 2;
p->next = NULL;
Solution s;
while(ptr != NULL)
{
cout<<ptr->val<<'\t';
ptr = ptr->next;
}
cout<<endl;
return 0;
}
0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：41953次
• 积分：1290
• 等级：
• 排名：千里之外
• 原创：90篇
• 转载：2篇
• 译文：0篇
• 评论：3条