1. Linked List traversal&Reverse Linked List
This type of questions normally needs prev variable in order to remove certain nodes or reverse linked list
dummy = ListNode()
dummy.next = head
prev = dummy
while head:
if hashmap[head.val] > 1:
prev.next = head.next
else:
prev = head
head = head.next
return dummy.next prev = None
while head:
next = head.next
head.next = prev
prev = head
head = next
return prev1290. Convert Binary Number in a Linked List to Integer
206. Reverse Linked List
2046. Sort Linked List Already Sorted Using Absolute Values
160. Intersection of Two Linked Lists
1265. Print Immutable Linked List in Reverse
2181. Merge Nodes in Between Zeros
1669. Merge In Between Linked Lists
92. Reverse Linked List II
1. find the rightmost not-nine digit
2. increase this rightmost not-nine digit by 1
3. set all the following nines to zeros382. Linked List Random Node
817. Linked List Components
2058. Find the Minimum and Maximum Number of Nodes Between Critical Points
19. Remove Nth Node From End of List
61. Rotate List
2487. Remove Nodes From Linked List
725. Split Linked List in Parts
2. Fast slow pointer
fast_pointer = head
slow_pointer = head
while fast_pointer or fast_pointer.next:
fast_pointer = fast_pointer.next.next
slow_pointer = slow_pointer快慢指针主要用来找到链表的中间点, 如果链表的长度是奇数时,慢指针最终指向链表的中间点, 如果链表的长度是偶数时,慢指针最终指向第(n/2 + 1) 个点(例如链表长度是4,慢指针最终指向第三个点)
判断链表是否有环也可以使用快慢指针。 如果有环, 则快指针与慢指针最终会相遇。2130. Maximum Twin Sum of a Linked List
234. Palindrome Linked List
876. Middle of the Linked List
141. Linked List Cycle
2095. Delete the Middle Node of a Linked List
24. Swap Nodes in Pairs
142. Linked List Cycle II
3. Two pointers
遇到two pointer 的题, 如果从前后双指针,可以先使用快慢指针确定中间节点, 然后翻转后半段链表。这样就可以前后同时进行遍历了21. Merge Two Sorted Lists
328. Odd Even Linked List
1634. Add Two Polynomials Represented as Linked Lists
86. Partition List
2. Add Two Numbers
4. design/ doubled linked list
1472. Design Browser History
641. Design Circular Deque
5. Override value
237. Delete Node in a Linked List
1721. Swapping Nodes in a Linked List
6. Monotonic stack
1019. Next Greater Node In Linked List
7. DFS/BFS
426. Convert Binary Search Tree to Sorted Doubly Linked List
114. Flatten Binary Tree to Linked List
430. Flatten a Multilevel Doubly Linked List
116. Populating Next Right Pointers in Each Node
109. Convert Sorted List to Binary Search Tree
117. Populating Next Right Pointers in Each Node II
1367. Linked List in Binary Tree
8. Design
622. Design Circular Queue
146. LRU Cache: OrderedDict and dict+linked list
1670. Design Front Middle Back Queue
379. Design Phone Directory
355. Design Twitter
707. Design Linked List
9. Delete nodes
203. Remove Linked List Elements
83. Remove Duplicates from Sorted List
1836. Remove Duplicates From an Unsorted Linked List
82. Remove Duplicates from Sorted List II
1474. Delete N Nodes After M Nodes of a Linked List
10.Question needs to be practiced
328. Odd Even Linked List
11.Sorting
147. Insertion Sort List
12.Prefix Sum
1171. Remove Zero Sum Consecutive Nodes from Linked List
13.Tricks
There are some tricks used in solving linked list questions
When we would like to construct an integer from a string or linked list, we can always use this pattern. For example:
string = 'xxx'
integer = 0
for item in string:
integer = integer*base + item
Here base can be 10 base, 2 base.