题目:给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
package com.test58_LeetCode;
public class E02Leetcode203 {
public ListNode removeElements(ListNode head, int val){
//方法1
//哨兵
ListNode s = new ListNode(-1,head);
ListNode p1 = s;
ListNode p2 = s.next;
/** while (p2 != null){
if(p2.val == val){
//删除,p2向后平移
p1.next = p2.next;
//效果一样
// p2 = p2.next;
p2 = p1.next;
}else {
// p1 和 p2 向后平移
p1 = p1.next;
//等价的
// p2 = p2.next;
p2 = p1.next;
}
}
return s.next;
**/
while (p2 != null){
if(p2.val == val){
//删除,p2向后平移
p1.next = p2.next;
//效果一样
// p2 = p2.next;
}else {
// p1 和 p2 向后平移
p1 = p1.next;
//等价的
// p2 = p2.next;
}
//将p2 = p1.next;抽取出来,因为他是共同部分
p2 = p1.next;
}
return s.next;
}
//方法2
public static void main(String[] args) {
E02Leetcode203 e = new E02Leetcode203();
System.out.println(e.removeElements(list(),5) );
}
private static ListNode list() {
ListNode o5 = new ListNode(5,null);
ListNode o4 = new ListNode(5,o5);
ListNode o3 = new ListNode(5,o4);
ListNode o2 = new ListNode(5,o3);
ListNode o1 = new ListNode(5,o2);
return o1;
}
}