LeetCode—19. Remove Nth Node From End of List

Type:medium

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, andn= 2.After removing the second node from the end, the linked list becomes1->2->3->5.

Note:

Given n will always be valid.


本题题意为给定一条链表,要删掉从尾往头数的第n个节点,并返回头节点。

换种思路想,当链表长度为L时,要删去的是第 L-n+1 个节点,只要知道L的长度,将第 L-n 个节点的 next 节点赋为第 L-n+2 个节点即可。

由于 head 指针不能动,因此建立 dummy 指针,通过判断 dummy 的下一个节点是否为空来确定 L 的大小。

要注意:

1、当L为0或1时,返回空节点。

2、当n值等于L时,即删掉头节点,直接返回第二个节点即 head->next 即可。


/**

* 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) {

        if(head == NULL || head->next == NULL) return NULL;

        int L = 1;

        ListNode* dummy = head;

        while(dummy->next != NULL){

            dummy = dummy->next;

            L++;

        }

        //remove L-n+1

        dummy = head;

        if(L == n) {

            return head->next;

        }else{

            for(int i=1; i

                dummy = dummy->next;

            }

            dummy->next = dummy->next->next;

            return head;

        }

    }

};

你可能感兴趣的:(LeetCode—19. Remove Nth Node From End of List)