19.删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
1 | public ListNode removeNthFromEnd(ListNode head, int n) { |
237. 删除链表中的节点
1 | /** |
83. 删除排序链表中的重复元素
1 | /* |
61.旋转链表
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
1 | public ListNode rotateRight(ListNode head, int k) { |
24.两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

1 | //需要交换a,b两个节点时 |
1 | public ListNode swapPairs(ListNode head) { |
206.反转链表
1 | public ListNode reverseList(ListNode head) { |
92.反转链表2


1 | public ListNode reverseBetween(ListNode head, int m, int n) { |
160.相交链表

编写一个程序,找到两个单链表相交的起始节点。
求相交的点,两个指针,第一个指针从a走,走a+c,到达尾部,再从b走;
第二个指针从b走,走b+c,到达尾部,再从a走。
这样,两个指针都走了a+b+c,相交点即为所求。
1 | public ListNode getIntersectionNode(ListNode headA, ListNode headB) { |
234. 回文链表
1 | /** |
空间复杂度为O(1)的方法。
1 | /** |
86. 分隔链表
1 | public ListNode partition(ListNode head, int x) { |
138. 复制带随机指针的链表
通过哈希表来解决,空间复杂度O(n)
1 | public Node copyRandomList(Node head) { |
空间复杂度为O(1)
1 | /**遍历链表,建立一个包含原节点以及复制节点1->1'->2->2'->3->3' |
两个链表相交问题
1 | /** |
哑节点问题
假如需要操纵节点的前置节点,那么在头节点前面添加一个哑节点。
1 | //跳出while循环,此时cur指向的是最后一个节点 |