Leetcode-链表

二、链表

1.复制带随机指针的链表

第一步:将链表的每一个节点后面都新建一个和该节点值一样的节点,
第二步:根据老节点的rand指针将新节点的rand指针添加上,
第三步:将链表按照奇偶数分成两个链表,取第二个链表

注意: 首先要判空,第二要注意复制前的链表的结点的random为空情况的判断

2.分隔链表

笔试:把单链表放到数组里,用partition,数组排序后用node穿起来,申请node类型的数组,然后串起来
面试:六个变量,小于部分的头和尾,等于部分的头和尾,大于部分的头和尾

3.回文链表的判断

方法1:快慢指针,找到中间的节点,将后一半的节点放在栈里,最后从头结点开始和栈中的第一个元素作比较判断是不是回文

方法2:快慢指针先找到中间节点,然后后面的节点反转过来,最后从两头的头节点开始判断是不是回文

4. 排序链表

5. 反转链表

虽然简单,但是要多练习

6. 旋转链表

题目描述:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

方法一:循环遍历链表,找到新的头结点,将旧头结点指向链表尾部

方法二(推荐):先找到链表的最后一个节点,同时计算出链表的长度,根据K值计算出第几个结点为新的头结点,断开头结点和上一个结点的链接,同时将旧头结点指向链表尾部

7. 合并两个有序链表

easy

8. 两两交换链表中的节点

方法一:笨方法,依次将两个节点互换,直到链表中就剩下一个节点或无节点

方法二: 递归方法,非常好的思路,具体实现可看code

9. 表中环的入口节点

方法一:可通过快慢指针的方式,当快指针和慢指针相遇的时候,慢指针指向头指针,接下来慢指针和快指针都一步一步走,再相遇的时候就是环的入口节点。

方法二:哈希表法,遍历链表,若节点不在hash表里,则将该节点加到hash表中,若节点在hash表中,则说明该节点为入口节点。 记得判断无环情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值