删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
题目分析:
想到给定的值在链表中可能存在3个地方,两端和中间,所以分三种情况处理。
代码实现:
public static class ListNode { int val; ListNode next; ListNode(int x) { val = x; } } public ListNode removeElements(ListNode head, int val) { if (head == null) return head; while (head != null && head.val == val) //处理值在首节点 head = head.next; if (head == null) return head; ListNode Pre = head; ListNode temp = head.next; while (temp != null) { if (temp.next == null) //处理值在末尾位置 { if (temp.val != val) break; Pre.next = null; break; } else if (temp != null && temp.val == val) //处理值在链表中间 { int value = temp.next.val; temp.val = value; temp.next = temp.next.next; } else { Pre = temp; temp = temp.next; } } return head; }
主函数:
public static void main(String[] args) { L6 l = new L6(); ListNode node = new ListNode(1); node.next = new ListNode(4); node.next.next = new ListNode(2); node.next.next.next = new ListNode(3); node.next.next.next.next = new ListNode(4); ListNode res = l.removeElements(node,4); while (res != null) { System.out.print(res.val + " "); res = res.next; } }
运行结果:
1 2 3