删除链表中等于给定值 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) {
if(head == null){//链表为空时
return null;
}
ListNode prev = head; //定义一个prev指向链表的头;
ListNode cur = prev.next; //定义一个cur指向prev的next;
while (cur != null){ //遍历完条件;
if (cur.val == val){ //找到要删除的节点;
prev.next = cur.next;//把该节点删掉;
}else {
prev = cur; //未找到
}
cur = cur.next; //cur继续往后走;
}
if (head.val == val){ //头节点就是要删除的节点
head = head.next; //删除头,链表的头直接是head的next;
}
return head;
}
}
public static void main(String[] args) {
MyLinkedList myLinkedList = new MyLinkedList();
myLinkedList.addLast(17);
myLinkedList.addLast(29);
myLinkedList.addLast(35);
myLinkedList.addLast(18);
myLinkedList.addLast(35);
myLinkedList.addLast(35);
myLinkedList.display();
System.out.println("================");
myLinkedList.removeAllKey(35);
myLinkedList.display();
}
图示:
注意考虑:
①链表为空;
②头借点就是要删除的结点;
结果: