删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6 输出: 1->2->3->4->5
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ //方式一:使用虚拟头结点表示 class Solution { public ListNode removeElements(ListNode head, int val) { ListNode dumhead=new ListNode(-1); dumhead.next=head; ListNode prev=dumhead; //这里假如特判head.next==null;的话 测试用例[1] 1,会无法通过,,, //解决办法:要么不进行特判,要么只判断head==null的情况。 // if(head==null || head.next==null) // return head; while(prev.next!=null){ if(prev.next.val==val) prev.next=prev.next.next; else prev=prev.next; } return dumhead.next; } }
//方式二:使用递归调用解决问题 class Solution { public ListNode removeElements(ListNode head, int val) { if(head==null) return head; if(head.val==val) return removeElements(head.next,val); head.next=removeElements(head.next,val); return head; } }
解题思路:在head之前创建一个虚拟的节点;之后创建一个指针变量指向虚拟节点,用来遍历所有的链表元素。