Leetcode NO.19 Remove Nth Node From End of List

来源:互联网 发布:java接口与安卓对接 编辑:程序博客网 时间:2024/05/16 03:08

本题题目要求如下:

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.

本题第一遍的时候好像是没有想到,其实还是挺简单的,就是弄两个pointer:fast和slow,fast先走n步,然后slow出发,跟fast速度一样,当fast到达tail的时候,slow就离tail有n那么远。。。具体实现有些细节需要注意,但是大体的想法就是这个意思,代码如下:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* removeNthFromEnd(ListNode* head, int n) {        ListNode* virtualNode = new ListNode(-1);        virtualNode->next = head;        ListNode* prev = virtualNode;        ListNode* fast = head;        ListNode* slow = head;        for (int i = 1; i < n; ++i) {            fast = fast->next;        }        while (fast->next != nullptr) {            fast = fast->next;            prev = slow;            slow = slow->next;        }        prev->next = slow->next;        delete slow;        return virtualNode->next;    }};


0 0