1,问题描述
203. 移除链表元素
难度:简单
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
示例 1:

1 2
| 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]
|
示例 2:
1 2
| 输入:head = [], val = 1 输出:[]
|
示例 3:
1 2
| 输入:head = [7,7,7,7], val = 7 输出:[]
|
提示:
- 列表中的节点数目在范围
[0, 104]
内
1 <= Node.val <= 50
0 <= val <= 50
2,初步思考
这个很简单,直接遍历删除、重连即可解决;然后在看到题解中有递归算法,我又立马想了递归的题解
递归的解法太优雅了!!!
3,代码处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| import support.ListNode;
public class _203移除链表元素 {
public ListNode removeElements_recursion(ListNode head, int val) { if(head == null) return null; head.next = removeElements_recursion(head.next, val); return head.val == val ? head.next : head; }
public ListNode removeElements_iterate(ListNode head, int val) { ListNode headNew = new ListNode(-1); ListNode before = headNew; before.next = head; ListNode tail = head; while (tail!=null){ if(tail.val == val){ before.next = tail.next; }else { before = before.next; } tail = tail.next; } return headNew.next; }
public static void main(String[] args) { _203移除链表元素 removeElements = new _203移除链表元素(); ListNode head = new ListNode(1); head.next = new ListNode(2); head.next.next = new ListNode(6); head.next.next.next = new ListNode(3); head.next.next.next.next = new ListNode(4); head.next.next.next.next.next = new ListNode(5); head.next.next.next.next.next.next = new ListNode(6);
ListNode listNode = removeElements.removeElements_recursion(head, 6); while (listNode!=null){ System.out.println(listNode.val); listNode = listNode.next; } } }
|
下面是官方的题解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { public ListNode removeElements_gov_recursion(ListNode head, int val) { if (head == null) { return head; } head.next = removeElements_gov_recursion(head.next, val); return head.val == val ? head.next : head; }
public ListNode removeElements_gov_iterate(ListNode head, int val) { ListNode dummyHead = new ListNode(0); dummyHead.next = head; ListNode temp = dummyHead; while (temp.next != null) { if (temp.next.val == val) { temp.next = temp.next.next; } else { temp = temp.next; } } return dummyHead.next; }
}
|