思路
- 链表为空,则返回null
- 定义两个引用分别指向待删节点和待删节点的前一个节点
- 从头开始遍历,如果cur.val==所指定的值,那么满足条件,让前一个结点的next指向当前节点的下一个节点,然后cur指向下一个节点即可
- 直到当前节点为空,循环结束
- 注意:头节点也可能满足删除条件,所以也要进行判断~,如果满足删除条件,那么返回头结点的下一个节点
代码
class ListNode {
int val;
ListNode next;
ListNode(int val) { this.val = val; }
}
public class Test {
//创建一个链表
public static ListNode init(){
ListNode node1=new ListNode(1);
ListNode node2=new ListNode(1);
ListNode node3=new ListNode(2);
ListNode node4=new ListNode(1);
node1.next=node2;
node2.next=node3;
node3.next=node4;
node4.next=null;
return node1;
}
//打印链表
private static void printNodeList(ListNode head) {
for(ListNode cur=head;cur!=null;cur=cur.next){
System.out.print(cur.val+" ");
}
System.out.println();
}
//删除元素
public static ListNode removeElements(ListNode head, int val) {
if(head==null){
return null;
}
ListNode prev=head;//待删节点的前一个节点
ListNode cur=prev.next;//待删节点
for(;cur!=null;cur=cur.next){
if(cur.val==val){
prev.next=cur.next;
}else{
prev=cur;
}
}
if(head.val==val){
head=head.next;
}
return head;
}
public static void main(String[] args) {
ListNode head=init();
//删除前
printNodeList(head);
//删除后
head=removeElements(head,1);
printNodeList(head);
}
}
结果