删除节点
237. Delete Node in a Linked List(AC代码)
O(1)时间删除链表节点
19. Remove Nth Node From End of List(简单题,AC代码)
删除链表从后向前数的第n
个节点
203. Remove Linked List Elements(简单题,AC代码)
给定val
,删去链表中所有值为val
的节点
83. Remove Duplicates from Sorted List(AC代码)
删除链表中的重复元素,保留1个
82. Remove Duplicates from Sorted List II(繁琐,AC代码)
删除链表中的重复元素,保留0个
按某种规则重排
206. Reverse Linked List(迭代解法,递归解法)
反转链表
92. Reverse Linked List II(AC代码)
链表编号从1开始,反转编号从m
开始到n
的所有节点,只允许遍历一趟链表
24. Swap Nodes in Pairs(AC代码)
链表的节点从1开始编号,将每两个节点交换,
L1→L2→L3→L4→⋯⇒L2→L1→L4→L3→⋯
L
1
→
L
2
→
L
3
→
L
4
→
⋯
⇒
L
2
→
L
1
→
L
4
→
L
3
→
⋯
61. Rotate List(AC代码)
将链表循环右移k
位
147. Insertion Sort List
对链表实现插入排序(AC代码)
附:链表选择排序(AC代码)
148. Sort List(AC代码)
链表排序,推荐归并排序,可以借用21. Merge Two Sorted Lists的代码
86. Partition List(AC代码)
给定x
,将链表中小于x
的节点放在前半段,大于等于x
的节点放在后半段
328. Odd Even Linked List(AC代码)
链表的节点从1开始编号,将链表按照先奇数后偶数的顺序重新排列
以上两题思路均为:建立两个新的链表l1
,l2
,在遍历原链表的过程中,l1
,l2
各自收集节点,最终把l1
,l2
拼接起来
143. Reorder List(AC代码)
重排链表,
L0→L1→⋯→Ln−1→Ln⇒L0→Ln→L1→Ln−1→L2→Ln−2
L
0
→
L
1
→
⋯
→
L
n
−
1
→
L
n
⇒
L
0
→
L
n
→
L
1
→
L
n
−
1
→
L
2
→
L
n
−
2
对两个链表进行操作
21. Merge Two Sorted Lists(AC代码)
合并两个排序链表
160. Intersection of Two Linked Lists(AC代码)
两个链表的第一个公共节点
2. Add Two Numbers(AC代码)
把链表看作整数,求两个链表之和,表头为整数的低位
445. Add Two Numbers II(AC代码)
把链表看作整数,求两个链表之和,表头为整数的高位
138. Copy List with Random Pointer(AC代码)
复制链表的复制,链表节点多了一个random
成员,指向其它节点或为NULL
其它
141. Linked List Cycle(AC代码)
判断链表中是否有环
142. Linked List Cycle II(AC代码)
找出链表成环的位置,如果无环,返回NULL
234. Palindrome Linked List(AC代码)
判断链表是否是回文的
109. Convert Sorted List to Binary Search Tree(AC代码)
利用有序的list构造BST
876. Middle of the Linked List
求链表的中间节点,该题的要求是对于len
为偶数的情况,返回靠后的那个节点
靠前版本
class Solution {
public:
ListNode* middleNode(ListNode* head) {
ListNode* newHead = new ListNode(-1);
newHead->next = head;
ListNode* slow = newHead, *fast = newHead;
// 判断fast是否能往后走2步
while( fast && fast->next )
{
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
};
靠后版本
class Solution {
public:
ListNode* middleNode(ListNode* head) {
ListNode* slow = head, *fast = head;
// 判断fast是否能往后走2步
while( fast && fast->next )
{
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
};