链表
- 单链表:链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素的引用字段链接在一起。
- 双链表:与单链表不同的是,双链表的每个节点都含有两个引用字段。
链表优点
- 灵活分配内存空间
- 能在O(1)时间内删除或者添加元素(单链表前提是元素的前一个元素已知,双链表前提是前后元素已知)
缺点
- 查询一个元素需要O(n)时间(从头根据引用找到下一个节点)
解题技巧
- 利用快慢指针(有时候需要用到三个指针)(例如:链表翻转,寻找倒数第k个元素,寻找链表中间位置的元素,判断链表是否有环)
- 构建一个虚假链表头
LeetCoded第21题题解–合并两个有序链表
LeetCoded第206题题解–反转链表
LeetCoded第2题题解–两数相加
25.K个一组翻转链表
给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。
k 是一个正整数,它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
.
.
示例:
给你这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
.
.
说明:
你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。
解题思路
- 首先保证链表长度大于K,否则直接返回原链表就可以了