leetCode数据结构入门 | 160.相交链表 82. 删除排序链表中的重复元素 II 24. 两两交换链表中的节点 707.设计链表 25.K个一组翻转链表 143.重排链表

160.相交链表

1.哈希表

2.双指针分别遍历两个链表,相等时返回交点。

两个链表相交节点前的结点个数不一定相同,所以当指针同时从A,B的头开始时,并不能同时遍历到交点,会出现错误答案。

【4,1,8,4,5,5,6,1,8,4,5

【5,6,1,8,4,5,4,1,8,4,5

相当于两个指针都遍历了m+n的长度,后端对齐了。

82. 删除排序链表中的重复元素 II

哈希表 ,乐:)自己写出来啦!

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

用了三个指针+一个假的头结点,乐:)自己写出来啦!

但是为什么new ListNode(0,head);new出来的对象是一个指针啊。

707.设计链表

要自己定义结构体和新的类ListNode;

25.K个一组翻转链表

参考206.反转链表

需要把链表节点按照 k 个一组分组,所以可以使用一个指针 head 依次指向每组的头节点。这个指针每次向前移动 k 步,直至链表结尾。

对于每个分组,先判断它的长度是否大于等于 k。若是,就翻转这部分链表,否则不翻转。

翻转一个分组内的子链表,还需要将子链表的头部与上一个子链表连接,以及子链表的尾部与下一个子链表连接。

 143.重排链表

1.因为链表不支持下标访问,所以我们无法随机访问链表中任意位置的元素。利用线性表存储该链表,然后利用线性表可以下标访问的特点,直接按顺序访问指定元素,重建该链表即可。

2.任务即可划分为三步:

  •     找到原链表的中点(参考「876. 链表的中间结点」)。可以使用快慢指针来 O(N)O(N) 地找到链表的中间节点。(快慢指针。)
  •     将原链表的右半端反转(参考「206. 反转链表」)。可以使用迭代法实现链表的反转。
  •     将原链表的两端合并。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值