思路
本题就是熟悉链表的基本操作,遍历链表;
在链表中通常设置一个虚拟节点,方便对头节点进行统一操作
题目描述
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
代码
package List;
import java.util.Scanner;
public class _203移除链表元素 {
public static ListNode removeElements(ListNode head, int val) {
//链表设置一个虚拟节点,方便对整个链表进行操作
if(head==null) return head;
ListNode dummy=new ListNode(-1,head);
ListNode pre=dummy;
ListNode cur=head;
//dummy是新建的链表的头指针,而pre相当于一个遍历指针,来重建这个新的链表,所以需要和cur保持一致
while(cur!=null) {
if(cur.val==val) {
pre.next=cur.next;
}
else {
pre=cur;
}
cur=cur.next;
}
return dummy.next;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int n=sc.nextInt();
ListNode head=new ListNode();
int a=sc.nextInt();
head.val=a;
}
}
}
总结
遍历链表需要定义一个新的指针,单链表为了方便操作,最好设置一个虚拟节点