链表
Java
1 | class ListNode { |
C++
1 | struct ListNode { |
1. 反转链表
反转一个单链表。 这是Leetcode 206
号问题。
1 | class Solution { |
2. 环形链表
给定一个链表,判断链表中是否有环。 这是Leetcode 141
号问题。
1 | class Solution { |
3. 相交链表
编写一个程序,找到两个单链表相交的起始节点。 这是Leetcode 160
号问题。
1 | public class Solution { |
4. 链表的中间节点
快慢指针
1 | class Solution { |
值得注意的是:当链表长度为奇数时,fast最后指向最后一个节点:1->3->5…;当链表长度为偶数,fast最后为空.
5. 链表的倒数第k个节点
快慢指针,先让快指针走k步,之后快慢指针一起走,当快指针为空时,慢指针恰好走到倒数第k个节点。
1 | class Solution { |
6. 重排链表
链表中间节点+反转后半个链表+合并两个链表(基本包含了常用的对链表的操作,具有代表性)
1 | class Solution { |
7. 排序链表
Leetcode 148号问题。
归并排序链表版,相比数组,空间复杂度只需要O(1)。思想其实比较简单,关键是分的过程中,注意找到中间节点后断掉后半部分链表以及边界的处理问题。
1 | class Solution { |
8.分隔链表
很简单。。。。。
86. 分隔链表
1 | /** |