文章目录
一、今日刷题
1. 第五部分:链表 – 203.移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
答案代码:
用迭代的方法删除链表中所有节点值等于特定值的节点。
用 temp 表示当前节点。如果 temp 的下一个节点不为空且下一个节点的节点值等于给定的 val,则需要删除下一个节点。删除下一个节点可以通过以下做法实现:
temp.next = temp.next.next
如果 temp 的下一个节点的节点值不等于给定的 val,则保留下一个节点,将 temp 移动到下一个节点即可。
当 temp 的下一个节点为空时,链表遍历结束,此时所有节点值等于 val 的节点都被删除。
具体实现方面,由于链表的头节点 head 有可能需要被删除,因此创建哑节点dummyHead,令 dummyHead.next =head,初始化 temp=dummyHead,然后遍历链表进行删除操作。最终返回 dummyHead.next 即为删除操作后的头节点。
package LinkedList;
/**
* @author: LYZ
* @date: 2022/2/7 15:52
* @description: 203.给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
*/
/**
* Definition for singly-linked list.
* public 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 RemoveElements {
public static void main(String[] args) {
RemoveElements removeElements = new RemoveElements();
//构造链表head并输出,但发现while循环输出后,链表head变为null了,无法再执行removeElements方法
//所以将此处仅用于测试创建链表以及输出链表的head更名为headTest
ListNode headTest = new ListNode(1);
headTest.next = new ListNode(2);
headTest.next.next = new ListNode(6);
System.out.println(headTest);
while (headTest != null) {
System.out.println(headTest.val);
headTest = headTest.next;
}
System.out.println("*************************");
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next