LeetCode 206 反转链表
功能实现:
[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]
- 设置dummy, dummy.next = head
- 必须要设置两个缓存量,hNext 和 dNext 来指代目前需要操作的Node
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
// 前面dummy的节点
ListNode dummy = new ListNode(-1, head);
while (head != null && head.next != null) {
// 这两个缓存量必须要设置才能搞清楚指代的量,不然无法一步得出下面三个操作
ListNode dNext = dummy.next;
ListNode hNext = head.next;
// 交换
dummy.next = head.next;
head.next = head.next.next;
hNext.next = dNext;
}
return dummy.next;
}
}
LeetCode 203 删除元素
功能实现:
[1, 2, 6, 4, 5, 6], val = 6;
[1, 2, 4, 5]
class Solution {
public ListNode removeElements(ListNode head, int val) {
if (head == null) {
return null;
}
ListNode check = head;
while (check.val == val) {
check = check.next;
if (check == null) {
return null;
}
}
ListNode res = check;
while (res != null && res.next != null) {
while (res.next.val == val) {
res.next = res.next.next;
if (res.next == null) {
break;
}
}
res = res.next;
}
return check;
}
}