您的位置:首页 > 其它

LeetCode解题记录(19)——删除链表的倒数第N个节点

2020-01-13 17:03 288 查看

LeetCode解题记录——删除链表的倒数第N个节点

  • 解题方案
  • 题目说明

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

    测试样例

    输入:1->2->3->4->5, n = 2.
    输出:1->2->3->5.

    题意理解

    简单的链表题,关键在于如何确定位置,以及一些必要的判断条件。

    解题方案

    选择相对位置法,使用两个指针来指使相对位置,现将两个指针移动到相隔n个元素的位置,然后同时向后移动,直到后一个指针移动到末尾,将前一个元素删除即可。

    /**
    * Definition for singly-linked list.
    * struct ListNode {
    *     int val;
    *     ListNode *next;
    *     ListNode(int x) : val(x), next(NULL) {}
    * };
    */
    class Solution {
    public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
    if(head == NULL)//空链表
    return head;
    ListNode *pre = head,*a = head,*b = head;
    while(n>0&&b!=NULL){//移动至相对位置
    b = b->next;
    n--;
    }
    if(n != 0)//若n大于链表长度
    return head;
    if(b == NULL)//若恰好删除头元素
    return head->next;
    while(b!=NULL){//同步向后移动
    pre = a;
    a = a->next;
    b = b->next;
    }
    pre->next = a->next;//删除元素
    return head;
    }
    };


    所有代码都可以在我的github上找到:LeetCode

    • 点赞
    • 收藏
    • 分享
    • 文章举报
    DerrickerXu 发布了29 篇原创文章 · 获赞 2 · 访问量 294 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: