美文网首页
Leetcode19-删除链表的倒数第N个结点

Leetcode19-删除链表的倒数第N个结点

作者: 小豆oo | 来源:发表于2019-01-12 22:54 被阅读0次

    题目:删除链表的倒数第N个结点

    解答:

    方法一:快慢指针

    ListNode* removeNthFromEnd(ListNode* head, int n) {
            ListNode dummy(0);
            dummy.next = head;
            ListNode* fast = &dummy;
            ListNode* slow = &dummy;
            for(int i=0;i<n;i++)
            {
                if(fast!=nullptr){
                    fast = fast->next;
                }else{
                    return nullptr;//链表长度小于n
                }
            }
            while(fast->next!=nullptr)
            {
                slow = slow->next;
                fast = fast->next;
            }
            slow->next = slow->next->next;
            return dummy.next;
        }
    

    时间复杂度:n;空间复杂度:1

    8ms;79%

    优化:利用“指针的指针”——思维逐渐向这种方法靠拢

    ListNode* removeNthFromEnd(ListNode* head, int n) {
            ListNode** t1 = &head;
            ListNode* t2 = head;
            for(int i=1;i<n;++i)
            {
                t2 = t2->next;
            }
            while(t2->next != nullptr)
            {
                t1 = &((*t1)->next);
                t2 = t2->next;
            }
            *t1 = (*t1)->next;//指针的指针删除结点的方法
            return head;
        }
    

    4ms;100%

    相关文章

      网友评论

          本文标题:Leetcode19-删除链表的倒数第N个结点

          本文链接:https://www.haomeiwen.com/subject/kkdhdqtx.html