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

来源:互联网 发布:天津包子馅儿 知乎 编辑:程序博客网 时间:2024/06/05 14:21

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

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

删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
这个题目相当于在“返回链表倒数第n个节点”的基础上增加功能

注意点:1.删除节点p的关键在于要找到p的前一个节点,需要定义一个新的节点保存遍历得到的倒数第n个节点

2.其次就是特殊情况的判断。

/** * 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) {       ListNode*p=head;       ListNode*q=head;       ListNode*m;       if(head==NULL||head->next==NULL)       {           return NULL;       }       while(n>0&&q!=NULL)       {            q=q->next;            n--;       }       while(q!=NULL)       {           q=q->next;           m=p;           p=p->next;       }        if(p==head)        {            head=head->next;        }        else        {            m->next=m->next->next;        }        return head;       // write your code here    }};
原创粉丝点击