博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode学习笔记(19. 删除链表的倒数第N个节点)
阅读量:4049 次
发布时间:2019-05-25

本文共 1059 字,大约阅读时间需要 3 分钟。

在这里插入图片描述

这个题的思路其实非常简单,就用快慢指针,在一次遍历中,使快指针与慢指针之间的距离为n。但是实现过程确实充满波折,怀疑人生,还需要多加练习。

思考及遇到的几个问题:

1、慢指针最终指向待删除元素还是其上一个元素?如果我们将慢指针指向删除元素,那么如何将其上一个节点的指针域指向其下一个节点,达到将其删除的目的。所以,我们应该将慢指针最终指向待删除元素的上一个元素。

2、特例情况?在n小于链表长度时,上述过程其实是非常容易实现的。但是在第一个例子就出Bug了([1], 1)链表只有一个元素,那么如何指向其上面一个元素?所以我们增加一个头结点使其指向链表的第一个元素。

3、返回什么元素?最开始想法是既然删除了节点,直接返回head即可。然而对于上述特例情况,此时head已经被删除了。所以我们返回头结点的下一个节点指向地址。

在这里插入图片描述
解题代码:

/** * 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) {
ListNode *left,*right; ListNode *Head = new ListNode(0); Head->next = head; left = right = Head; for(int i=0;i<=n;i++){
right=right->next; } while(right!=nullptr){
right = right->next; left = left->next; } ListNode *temp; temp=left->next; left->next=temp->next; delete temp; return Head->next; delete Head; }};

转载地址:http://npyci.baihongyu.com/

你可能感兴趣的文章
GNU hello代码分析
查看>>
Qt继电器控制板代码
查看>>
wpa_supplicant控制脚本
查看>>
gstreamer相关工具集合
查看>>
RS232 四入四出模块控制代码
查看>>
linux 驱动开发 头文件
查看>>
container_of()传入结构体中的成员,返回该结构体的首地址
查看>>
linux sfdisk partition
查看>>
ipconfig,ifconfig,iwconfig
查看>>
opensuse12.2 PL2303 minicom
查看>>
网络视频服务器移植
查看>>
Encoding Schemes
查看>>
移植QT
查看>>
如此调用
查看>>
计算机的发展史
查看>>
带WiringPi库的交叉编译如何处理一
查看>>
带WiringPi库的交叉笔译如何处理二之软链接概念
查看>>
Spring事务的七种传播行为
查看>>
ES写入找不到主节点问题排查
查看>>
Java8 HashMap集合解析
查看>>