package com.linkedlist;
public class ListNode {
public int val;
public ListNode next;
public ListNode(int x) {
val = x;
}
public ListNode(int[] arr){
if(arr == null || arr.length == 0)
throw new IllegalArgumentException("arr can not be empty");
this.val = arr[0];
ListNode cur = this;
for(int i = 1 ; i < arr.length ; i ++){
cur.next = new ListNode(arr[i]);
cur = cur.next;
}
}
// 以当前节点为头结点的链表信息字符串
@Override
public String toString(){
StringBuilder s = new StringBuilder();
ListNode cur = this;
while(cur != null){
s.append(cur.val + "->");
cur = cur.next;
}
s.append("NULL");
return s.toString();
}
}
package com.linkedlist;
public class Solution {
public ListNode removeElements(ListNode head,int val){
while(head != null && head.val == val){
ListNode delNode = head;
head = head.next;
delNode.next = null;
}
if(head == null){
return head;
}
ListNode prev = head;
while (prev.next != null) {
if (prev.next.val == val) {
ListNode delNode = prev.next;
prev.next = delNode.next;
delNode.next = null;
}else{
prev = prev.next;
}
}
return head;
}
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9};
ListNode listNode = new ListNode(arr);
System.out.println(listNode);
ListNode ret = (new Solution()).removeElements(listNode, 7);
System.out.println(ret);
}
}
public ListNode removeElements(ListNode head,int val){
//获得删除节点
while (head != null && head.val == val) {
head = head.next;
}
if (head == null) {
return null;
}
ListNode prev = head;
while(prev.next != null){
if(prev.next.val == val){
prev.next = prev.next.next;
}else{
prev = prev.next;
}
}
return head;
}
public ListNode removeElements(ListNode head,int val){
if(head == null)
return head;
head.next = removeElements(head.next, val);
return head.val == val ? head.next : head;
}