赞
踩
思路:
1. 遍历原链表,如果与val值相等,则删除
特殊情况:链表为空时,怎么办
第一个节点head的值,如果等于val,怎么办
2. 需要两个指针,一个 cur 遍历整个链表
一个为 perv 记录 遍历的cur 的 前一个节点(如果遇到需要删除的结点,
需要知道此节点的前一个节点,所以需要prev)
//定义节点 class Node { int val; Node next = null; Node(int val){ this.val = val; } //打印链表 @Override public String toString() { return String.format("Node(%d)",val); } } public class Practice{ public static Node removeElements(Node head,int val){ //如果链表为空,直接返回null if(head == null){ return null; } //指向 cur 的前一个节点 Node prev = head; //cur 用于 遍历整个链表 Node cur = head; while(cur != null){ if(cur.val == val){ prev.next = cur.next; }else{ prev = cur; } cur = cur.next; } //如果 head 的值为 val,让 head 指向 head 的 下一个元素 if(head.val == val){ head = head.next; } return head; } //测试方法 创建一个链表 private static Node test(){ Node n1 = new Node(1); Node n2 = new Node(2); Node n3 = new Node(1); Node n4 = new Node(3); n1.next = n2; n2.next = n3; n3.next = n4; return n1; } public static void main(String[] args) { //删除 val 值 为 1 的 节点 Node head = removeElements(test(),1); for(Node cur = head;cur != null;cur = cur.next){ System.out.println(cur); } } }
1.定义一个结果链表result
2.last-------> 指向结果链表的最后一个元素
3.cur-------->用来遍历原链表
思路:
1.如果cur的值与cur不相等
1.1如果链表为空,让result 指向 cur
1.2如果链表不为空,让last.next = cur;
last = cur,使last 指向新链表的最后一个节点
2.如果cur的值与cur相等
让 cur = cur.next;
代码:
public class Practice3 { public static Node removeElements(Node head,int val){ Node cur = head; Node result = null; Node last = null; while(cur != null){ if(cur.val != val) { if(result == null){ result = cur; }else{ last.next = cur; } last = cur; } cur = cur.next; } if(last != null){ last.next = null; } return result; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。