您的位置:首页 > 其它

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

2017-03-31 17:21 323 查看
问题描述:

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


注意事项:链表中的节点个数大于等于n

样例

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

解题思路:

首先排除一些特殊情况,还需注意删除第一个节点的情况,用两个指针,第一个走到第n个节点时,第二个与第一个同时开始走,两个相差n步,当第一个走到最后一个节点是,第二个走到倒数n+1个,然后覆盖。

程序代码:

Definition of ListNode

  class ListNode {

  public:

      int val;

      ListNode *next;

      ListNode(int val) {

          this->val = val;

          this->next = NULL;

      }

  }

class Solution {

public:

    ListNode *removeNthFromEnd(ListNode *head, int n) {

      if (n <= 0 || head == NULL) return head;

        ListNode* p1 = head;

        while (n > 0 && p1 != NULL) {

            p1 = p1->next;

            n--;

        }

        if (p1 == NULL) {

            return head->next;         //删除第一个节点的情况

        }

        

        ListNode* p2 = head;        

        while (p1->next != NULL) {

            p1 = p1->next;

            p2 = p2->next;

        }

      p2->next=p2->next->next;

        return head;

        // write your code here

    }

};

感想:

这种方法需要注意,没有想到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: