• P13在O(1)时间内删除链表结点



    package
    offer; //在 O(1)时间删除链表结点 public class Problem13 { public static void main(String[] args) { ListNode node1 = new ListNode(); ListNode node2 = new ListNode(); ListNode node3 = new ListNode(); ListNode node4 = new ListNode(); node1.nextNode = node2; node2.nextNode = node3; node3.nextNode = node4; node1.value = 1; node2.value = 2; node3.value = 3; node4.value = 4; System.out.println(node1.value); System.out.println(node2.value); System.out.println(node3.value); System.out.println(node4.value); //deleteNode(node1, node3); //deleteNode(node1, node1); //deleteNode(node1, node2); //deleteNode(node1, node4); deleteNode(node1, null); System.out.println(node1.value); System.out.println(node1.nextNode.value); System.out.println(node1.nextNode.nextNode.value); //System.out.println(node4.value); } public static void deleteNode(ListNode head,ListNode deleteNode){ if(head == null || deleteNode == null)return; if(deleteNode == head && head.nextNode == null)//delete head { head = null; }else { if(deleteNode.nextNode == null) {//delete tail,traverse loop ListNode temp = head; while(temp.nextNode.nextNode != null) { temp = temp.nextNode; } temp.nextNode = null; } else { deleteNode.value = deleteNode.nextNode.value; deleteNode.nextNode = deleteNode.nextNode.nextNode; } } } }

    不用全部遍历链表,对比,删除;

    把deleteNode的下一个结点复制到deleteNode的位置,覆盖deleteNode(实际上是删除deleteNode的下一个结点)

    注意考虑用例:

    结点只有一个的链表;

    删除有多个结点的链表尾结点(遍历);

    删除空结点,链表为空;

    删除有多个结点的链表的中间一个结点。

  • 相关阅读:
    LNMP
    Unable to guess the mime type as no guessers are available 2 9
    django--模型字段引用
    no python application found, check your startup logs for errors
    uWSGI+django+nginx的工作原理流程与部署历程
    进程管理supervisor的简单说明
    Django 部署(Nginx)
    MyBatis学习教程
    Spring教程
    互联网的寒冬该如何度过
  • 原文地址:https://www.cnblogs.com/newcoder/p/5794748.html
Copyright © 2020-2023  润新知