Given linked list:1->2->3->4->5->null, andn=2.

After removing the second node from the end, the linked list becomes1->2->3->5->null.

class Solution {
public:
    /*
    题意:删除链表中倒数第n个结点,尽量只扫描一遍。
    使用两个指针扫描,当第一个指针扫描到第N个结点后,
    第二个指针从表头与第一个指针同时向后移动,
    当第一个指针指向空节点时,另一个指针就指向倒数第n个结点了
    */
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode *res = new ListNode(0);
        res->next = head;
        ListNode *tmp = res;
        for (int i = 0; i < n; i++) {
            head = head->next;
        }
        while (head != NULL) {
            head = head->next;
            tmp = tmp->next;
        }
        tmp->next = tmp->next->next;
        return res->next;
    }
};

results matching ""

    No results matching ""