题目描述:
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点
示例:
输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]
题目分析:
解法1:根据题目不难得出,只需要遍历链表,将其中的节点值与val相比较,如果相等则删除节点,不相等则循环至下一个节点。
解法二:此题还可以利用递归来做,每次调用方法返回节点。(原理是先将head节点移动到链表末尾,一层一层向上判断,当相同时返回head.next,不相同时返回head)
java解法
解法一:
class Solution {
public ListNode removeElements(ListNode head, int val) {
//创建虚拟节点
if(head == null) return head;
ListNode pre = new ListNode(0,head);
ListNode node = pre;
while(node.next != null){
if(node.next.val == val){
node.next = node.next.next;
}else{
node = node.next;
}
}
return pre.next;
}
}
解法二:
class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head == null) return null;
head.next = removeElements(head.next,val);
if(head.val == val){
return head.next;
}else{
return head;
}
}
}