(未完成)LeetCode 链表总结


2 Add Two Numbers 链表的应用:加法显示

19 Remove Nth Node From End of List  找到链表的倒数第几个节点,用到了先后指针。

21 Merge Two Sorted Lists 将两个有序链表合为一个有序链表,类似于同结构的合并。

23 Merge k Sorted Lists   单体为链表,总体为数组的归并

24 Swap Nodes in Pairs    递归的思想  将整体操作,分为内部和外部操作,同时内部操作产生参数,传入外部操作,而外部操作又是整体操作

25 Reverse Nodes in k-Group  用基本的翻转链表操作实现任意k的节点的倒转

61 Rotate List 链表的循环右移,与倒数位置节点有关

82 Remove Duplicates from Sorted List II 消除相连又同值的节点,类似龙珠游戏

83 Remove Duplicates from Sorted List  简单的同值消除

86 Partition List  类似于过滤,将原结构划分为两种结构:原链表划分成两种结构的链表,先分别生成两条链表再合并

92 Reverse Linked List II  任意区间的链表翻转

109 Convert Sorted List to Binary Search Tree 有序链表转为二叉查找树

138 Copy List with Random Pointer  深复制一个其节点附加任意指向的链表,由于新结构不具备性质,可在原结构上附加新结构,然后分离。

141 Linked List Cycle  循环链表 快慢指针

142 Linked List Cycle II 循环链表找到初始节点

143 Reorder List  将链表的链条结构变为螺旋结构

147 Insertion Sort List 插排

148 Sort List 归并排

160 Intersection of Two Linked Lists  两条链表是否会汇集与尾

203 Remove Linked List Elements 删除特定值的节点

206 Reverse Linked List 简单的翻转链表

234 Palindrome Linked List 回文链表的判断:运用快慢指针找中点 然后翻转判等

237 Delete Node in a Linked List 通过值而不是指针删除节点

需要注意的:

1.访问节点next指针,需要确定指针不为空

2.改变节点next指向,通常需要保存其原指向


链表的一些技巧:
1先后指针
1.1 定位
2快慢指针
2.1 找中点
2.2 判循环
3归并,递归,结构的分离再附加,结构的附加再分离
4链表的翻转
5链表改值删除




什么时候使用链表?
1,数据是逐渐增加的
2,数据是不定长的,在存储第一个数据之前难以确定一个将来一共需要存储多少数据的上限,或者虽然可以确定上限,但这个上限又比通常大部分情况下数据可能达到的长度要大得多,因而一次性按照上限把空间分配好是不划算的。而链表则可以在每次需要增加新数据时才为之申请内存,不会造成浪费,也不会因一次申请不足而使数据的数量受到限制。
3,不需要按照序号对数据进行随机访问。

C++ STL 中提供了list容器,就是链表。同时STL还提供了vector容器,也可以用于处理具有上述特点的数据,而且vector还支持随机访问(即可以不考虑上述第3点要求)。但vector在增加数据时,如果原先分配的连续内存已经用完则需要重新分配内存并把原有数据复制过去,这时它的插入数据的动作时间复杂度就不是O(1)了(不是常量时间了)。因而,链表适于处理的数据除了具有上述特点外,如果还有如下第4点特征,则以链表为最佳选择了:

4,希望每次添加数据、删除数据的动作的时间复杂度都是O(1)的(常量时间)。
转自http://www.zhihu.com/question/19773378 张凌的回答



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值