Linked list
加强对Java链表的理解
技巧:
Duplicating null
把一个链表的头,即第一次,在创建一个新的链表,使该链表指向要处理链表的头,
即使原来的头,变成现在的第二个。在一个算法中,可以把一些实现的小功能化的代码,单独拿出来作为一个方法
快慢指针 fast slow pointer
用来寻找链表的中间点:
去搜索一个链表的中点:创建一个slow、fast指针,while循环,每次slow向下指一个,
而fast向下指两个,当fast指到终点时,这时slow指向的正好是中间。private ListNode findMiddle(ListNode head) { ListNode slow = head, fast = head.next; while(fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; } return slow; }
O(nlogn)
merge sort(归并排序), quick sort(快排), heap sort(堆排序)
list : merge sort
array : quick sort
- 判断一个链表是否成环
利用快慢指针
如果fast与slow相遇,则链表里面有环。
题目:
- Remove Duplicates from Sored List
- Remove Duplicates from Sored List II
- Reverse Linked List II
- Reverse Linked List #&160;#&160; 反转链表
- partition list
- Reorder list
- Linked list Cycle
- Linked List Cycle II
- Rotate list
- Merge k Sorted Lists
- Copy List with Random Pointer
- convert Sorted List