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

原创 2016年05月30日 21:39:10

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) {
        //如果为空链表
        if (NULL == head)
        {
            return head;
        }
        //如果链表只有一个节点,且n为1
        if (NULL == head->next && 1 == n)
        {
            delete head;
            return NULL;
        }
        ListNode * ptr = head;
        --n;
        while (n>0 && ptr)
        {   
            ptr = ptr->next;
            --n;
        }
        //ptr不为NULL,则存在第n个节点,且此时ptr指向第n个节点
        if (ptr != NULL)
        {
            //这种情况表示待删除的节点为头节点
            if (ptr->next == NULL)
            {
                ListNode * tmp = head;
                head = head->next;
                delete tmp;
            }
            else
            {
                ListNode * pre = NULL;
                ListNode * curr = head;
                //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;
            }
        }       
        return head;
    }
};
int main()
{
    ListNode * head = (ListNode*)malloc(sizeof(ListNode));
    head->val = 1;
    ListNode * p = (ListNode*)malloc(sizeof(ListNode));
    p->val = 2;
    p->next = NULL;
    head->next = p;
    Solution s;
    head = s.removeNthFromEnd(head,1);
    ListNode *ptr = head;
    while(ptr != NULL)
    {
        cout<<ptr->val<<'\t';
        ptr = ptr->next;
    }
    cout<<endl;
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

LeetCode19——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, ...
  • booirror
  • booirror
  • 2015年02月05日 15:07
  • 1160

LeetCode 19 : Remove Nth Node From End of List (Java)

解题思路:一开始我的做法是先遍历一遍取得长度,然后长度减去n就知道要删除正着数第几个元素,结果题目要求one pass。那就只能用两个指针,一个快指针先走n步,一个慢指针从头开始走,这样当快指针走到尾...
  • changetocs
  • changetocs
  • 2015年12月01日 20:02
  • 946

Remove Nth Node From End of List -- LeetCode

原题链接: http://oj.leetcode.com/problems/remove-nth-node-from-end-of-list/  这道题是链表基本操作,主要问题就是如何得到链表的倒数第...
  • linhuanmars
  • linhuanmars
  • 2014年02月23日 23:39
  • 5895

[leetcode] 19. Remove Nth Node From End of List python实现【easy】

Remove Nth Node From End of List My Submissions QuestionEditorial Solution Given a linked list, r...
  • zl87758539
  • zl87758539
  • 2016年06月14日 21:50
  • 682

[LeetCode] 019. Remove Nth Node From End of List (Easy) (C++/Python)

[LeetCode] 019. Remove Nth Node From End of List (Easy) (C++/Python)
  • hcbbt
  • hcbbt
  • 2015年03月04日 19:26
  • 2277

(Java)LeetCode-19. 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, ...
  • u012848330
  • u012848330
  • 2016年05月31日 00:00
  • 289

LeetCode: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...
  • yao_wust
  • yao_wust
  • 2014年11月18日 10:08
  • 3913

LeetCode(19) 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...
  • feliciafay
  • feliciafay
  • 2013年12月18日 14:30
  • 1784

【LeetCode-面试算法经典-Java实现】【019-Remove Nth Node From End of List(移除单链表的倒数第N个节点)】

【019-Remove Nth Node From End of List(移除单链表的倒数第N个节点)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a l...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月22日 07:24
  • 2137

LeetCode 19. Remove Nth Node From End of List 解题报告

19. Remove Nth Node From End of List My Submissions Question Total Accepted: 94847 Total ...
  • bruce128
  • bruce128
  • 2016年02月20日 14:58
  • 832
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode第19题之 Remove Nth Node From End of List
举报原因:
原因补充:

(最多只允许输入30个字)