
思路:上图使用的是当前节点直接比对,通过被覆值,然后删除下一个节点的方式达到等效删除本节点,但是真正意义上删除的并不是要找的那个节点,节点的地址还是不同的
这里,换一种思路:找到要删除节点的前一个节点,就不说了。而是,遍历节点,存入LinkedList链表中,通过下标索引,直接删除即可。
package Nine.base.list;
import java.util.LinkedList;
import java.util.List;
public class DeleteNode
{
public static List<ListNode> list = new LinkedList<ListNode>();
public static boolean delete(ListNode head, Integer k)
{
if (head == null) return false;
ListNode tmp = head;
while (tmp != null){
if (tmp.val == k){
if (tmp.next == null){
while (head.next != tmp){
head = head.next;
}
head.next = tmp.next;
return true;
}else {
tmp.val = tmp.next.val;
tmp.next = tmp.next.next;
return true;
}
}else {
tmp = tmp.next;
}
}
return false;
}
public static void main(String[] args)
{
ListNode head = new ListNode(1);
ListNode node1 = new ListNode(2);
ListNode node2 = new ListNode(3);
ListNode node3 = new ListNode(4);
ListNode node4 = new ListNode(5);
head.next = node1;
node1.next = node2;
node2.next = node3;
node3.next = node4;
System.out.println(delete(head, 5));
ListNode tmp = head;
while (tmp != null){
System.out.println(tmp.val);
tmp = tmp.next;
}
}
}