LintCode 174. 删除链表中倒数第n个节点

Posted zslhg903

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode 174. 删除链表中倒数第n个节点相关的知识,希望对你有一定的参考价值。

给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。

 

样例

给出链表1->2->3->4->5->null和 n = 2.

删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.

挑战 

O(n)时间复杂度

/**
 * Definition of ListNode
 * class ListNode {
 * public:
 *     int val;
 *     ListNode *next;
 *     ListNode(int val) {
 *         this->val = val;
 *         this->next = NULL;
 *     }
 * }
 */


class Solution {
public:
    /*
     * @param head: The first node of linked list.
     * @param n: An integer
     * @return: The head of linked list.
     */
    ListNode * removeNthFromEnd(ListNode * head, int n) {
        // write your code here
        if(!head)
            return NULL;
        if(!head->next)
        {
            delete(head);
            return NULL;
        }
        ListNode* dummy=new ListNode(-1);
        dummy->next=head;
        
        
        
        ListNode *q,*pre;
        q=head;
        pre=dummy;
        while(n--&&q)
        {
            q=q->next;
        }
        while(q)
        {
            q=q->next;
            pre=pre->next;
        }
      
        ListNode* del=pre->next;
        pre->next=del->next;
        delete(del);
        return dummy->next;
    }
};

 

 

以上是关于LintCode 174. 删除链表中倒数第n个节点的主要内容,如果未能解决你的问题,请参考以下文章

LintCode 删除链表中倒数第n个节点

lintcode166 链表倒数第n个节点

LintCode 166. 链表倒数第n个节点

LintCode 链表倒数第n个节点

删除链表中倒数第n个节点

算法刷题:LC初级算法