前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >删除链表的倒数第N个节点

删除链表的倒数第N个节点

作者头像
宇宙之一粟
发布2020-10-26 10:38:31
4540
发布2020-10-26 10:38:31
举报
文章被收录于专栏:宇宙之_一粟

19. 删除链表的倒数第N个节点

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

示例:

代码语言:javascript
复制
给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?


解法一

先遍历一遍计算链表长度;再遍历一遍删除倒数第n个节点

解法二:进阶

只遍历一遍链表,能否解决这个问题?

代码语言:javascript
复制
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {

        assert(n >= 0);
        ListNode* dummyHead = new ListNode(0);
        dummyHead->next = head;

        ListNode* p = dummyHead;
        ListNode* q = dummyHead;
        for (int i = 0; i < n + 1; i++)
        {
            assert(q);
            q = q -> next;
        }
        
        while ( q != NULL)
        {
            p = p -> next;
            q = q -> next;
        }
        ListNode* delNode = p -> next;
        p -> next = delNode -> next;
        delete delNode;

        ListNode* retNode = dummyHead->next;
        delete dummyHead;

        return retNode;
    }
};

61. Rotate List

143. Recorder List

234. Palindrome Linked List

请判断一个链表是否为回文链表。

示例 1:

代码语言:javascript
复制
输入: 1->2
输出: false

示例 2:

代码语言:javascript
复制
输入: 1->2->2->1
输出: true

进阶: 你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?

代码语言:javascript
复制
class Solution {
public:
    bool isPalindrome(ListNode* head) {
        ListNode* slowp = head;
        ListNode* fastp = head;
        ListNode* revp = NULL;
        while (fastp && fastp->next) {
            fastp = fastp->next->next;
            ListNode* tmp = slowp->next;
            slowp->next = revp;
            revp = slowp;
            slowp = tmp;
        }
        if (fastp) 
            slowp = slowp->next;
        while ( slowp && revp) {
            if (slowp->val != revp->val) return false;
            slowp = slowp->next;
            revp = revp->next;
        }
        return true;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 19. 删除链表的倒数第N个节点
  • 解法一
  • 解法二:进阶
  • 61. Rotate List
  • 143. Recorder List
  • 234. Palindrome Linked List
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档