LeetCode19 Remove Nth Node From End of List

问题描述:
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, 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.

Follow up:

Could you do this in one pass?
题源:here;代码实现:here
思路:
两个方案,一个简单的把每一个中间节点都存下来;一个是巧妙的利用中间变量来变相记录链表长度。
方案1

    ListNode* removeNthFromEnd_1(ListNode* head, int n) {
        int idx = 0;
        vector<ListNode*> nodes;
        ListNode* temp = head;
        while (temp){
            nodes.push_back(temp);
            temp = temp->next;
        }

        int list_len = nodes.size();
        if (list_len == 1) return NULL;
        else if (list_len == 2){
            if (n == 1){
                delete head->next;
                head->next = NULL;
                return head;
            }
            else{
                ListNode* temp = head;
                head = head->next;
                delete temp;
                return head;
            }
        }

        if (list_len == n){
            ListNode* temp = head;
            head = head->next;
            delete temp;
            return head;
        }

        ListNode* q = nodes[list_len-n-1];
        ListNode* p = q->next;
        q->next = p->next;
        delete p;

        return head;
    }

方案2
方案二使用了两个指针,第一个先沿着输入的链表前进n步,第二个指向链表头;然后让两个指针同时向后移动,直到第一个指针指向链表的尾部,如下图所示(图片来源:here):
这里写图片描述
代码如下:

    ListNode* removeNthFromEnd(ListNode* head, int n){
        ListNode *feakhead;
        feakhead = new ListNode(-1);
        feakhead->next = head;
        head = feakhead;

        ListNode *p1, *p2;
        p1 = p2 = head;
        for (int i = 0; i < n; i++){
            p1 = p1->next;
        }

        while (p1->next){
            p1 = p1->next;
            p2 = p2->next;
        }

        ListNode* temp;
        temp = p2->next;
        p2->next = p2->next->next;
        delete temp;

        return head->next;
    }

猜你喜欢

转载自blog.csdn.net/m0_37518259/article/details/80706180
今日推荐