前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode *19. 删除链表的倒数第 N 个结点(双指针)

LeetCode *19. 删除链表的倒数第 N 个结点(双指针)

作者头像
SakuraTears
发布2022-01-13 14:41:13
1280
发布2022-01-13 14:41:13
举报
文章被收录于专栏:从零开始的Code生活

题目

1LCn36ESs4.png
1LCn36ESs4.png

思路

两次遍历法: 可以遍历两遍,第一遍求出链表长度,第二遍删掉倒数第n个。代码就不贴了。

双指针解法: 定义两个指针first, second。让first先走n + 1步,然后两个指针间距就是n。

然后让两个指针同时走当first走到最后时second->next就是要删除的节点删除即可。

需要注意的地方是如果要删除的是头结点的话,first走n + 1步就超出去了,所以要在first走到结尾时停止,如果走的步数少于n + 1就说明要删除的是头结点,然后直接返回head->next即可。

代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode *first = head;
        ListNode *second = head;
        int m = 0;
        while (first->next != nullptr && m < n) {
            m++;
            first = first->next;
        }
        if (m != n) {
            return head->next;
        }
        while (first->next != nullptr) {
            second = second->next;
            first = first->next;
        }
        second->next = second->next->next;
        return head;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021年03月16日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目
  • 思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档