这里写自定义目录标题
- 一、题目
- 二、先考虑头结点,再考虑非头结点
- 三、虚拟头结点解决
一、题目
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
二、先考虑头结点,再考虑非头结点
- 头结点的值恰好等于要删除的值,则需要将头结点后移
- 非头结点的值等于要删除的值, 则将要删除的节点的上一个节点next 指向要删除节点的next
public class LianbiaoRemoveEle {public static ListNode removeElements0(ListNode head, int val) {// 创建虚拟节点while (head != null && head.val == val) {head = head.next;}ListNode cur = head;while (cur.next != null) {if (cur.next.val == val) {cur.next = cur.next.next;} else {cur = cur.next;}}return head;}public static ListNode removeElements(ListNode head, int val) {// 创建虚拟节点ListNode dummyNode = new ListNode(0);dummyNode.next = head;ListNode cur = dummyNode;while (cur.next != null) {if (cur.next.val == val) {cur.next = cur.next.next;} else {cur = cur.next;}}return dummyNode.next;}public static void main(String[] args) {ListNode listNode1 = new ListNode(1);ListNode listNode2 = new ListNode(2);ListNode listNode3 = new ListNode(6);ListNode listNode4 = new ListNode(3);ListNode listNode5 = new ListNode(4);ListNode listNode6 = new ListNode(5);ListNode listNode7 = new ListNode(6);listNode1.next = listNode2;listNode2.next = listNode3;listNode3.next = listNode4;listNode4.next = listNode5;listNode5.next = listNode6;listNode6.next = listNode7;ListNode listNode = LianbiaoRemoveEle.removeElements0(listNode1, 6);while (listNode != null) {System.out.print(listNode.val + " ");listNode = listNode.next;}}
}class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) {this.val = val;}ListNode(int val, ListNode next) {this.val = val;this.next = next;}
}
三、虚拟头结点解决
创建虚拟节点指向头结点,这样就不需要对头结点单独处理了
public class LianbiaoRemoveEle {public static ListNode removeElements(ListNode head, int val) {// 创建虚拟节点ListNode dummyNode = new ListNode(0);dummyNode.next = head;ListNode cur = dummyNode;while (cur.next != null) {if (cur.next.val == val) {cur.next = cur.next.next;} else {cur = cur.next;}}return dummyNode.next;}public static void main(String[] args) {ListNode listNode1 = new ListNode(1);ListNode listNode2 = new ListNode(2);ListNode listNode3 = new ListNode(6);ListNode listNode4 = new ListNode(3);ListNode listNode5 = new ListNode(4);ListNode listNode6 = new ListNode(5);ListNode listNode7 = new ListNode(6);listNode1.next = listNode2;listNode2.next = listNode3;listNode3.next = listNode4;listNode4.next = listNode5;listNode5.next = listNode6;listNode6.next = listNode7;ListNode listNode = LianbiaoRemoveEle.removeElements(listNode1, 6);while (listNode != null) {System.out.print(listNode.val + " ");listNode = listNode.next;}}
}class ListNode {int val;ListNode next;ListNode() {}ListNode(int val) {this.val = val;}ListNode(int val, ListNode next) {this.val = val;this.next = next;}
}