203. 移除链表元素
题目描述
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
提示:
列表中的节点数目在范围 [0, 104] 内
1 <= Node.val <= 50
0 <= val <= 50
解题思路
1、确定循环方式为递归处理
2、节点为null时直接返回null
3、节点不为null 但节点val == val时 处理下一个节点
4、节点不为null 且节点val !=val时,当前节点的next指向处理后的下一节点,返回当前节点
代码实现
public class RemoveLinkedListElements {
public ListNode removeElements(ListNode head, int val) {
if (head == null) {
return null;
}
if (head.val == val) {
return removeElements(head.next, val);
} else {
head.next = removeElements(head.next, val);
return head;
}
}
public static void main(String[] args) {
// 创建测试链表 1 -> 2 -> 6 -> 3 -> 4 -> 5 -> 6
ListNode head = new ListNode(1);
ListNode node2 = new ListNode(2);
ListNode node6_1 = new ListNode(6);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(4);
ListNode node5 = new ListNode(5);
ListNode node6_2 = new ListNode(6);
head.next = node2;
node2.next = node6_1;
node6_1.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = node6_2;
System.out.println("Original list:");
head.printList();
int valToRemove = 6;
ListNode newHead = new RemoveLinkedListElements().removeElements(head, valToRemove);
System.out.println("List after removing " + valToRemove + ":");
newHead.printList();
}
}
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
public void printList() {
ListNode curr = this;
while (curr!= null) {
System.out.print(curr.val + " ");
curr = curr.next;
}
System.out.println();
}
}
998

被折叠的 条评论
为什么被折叠?



