zoukankan      html  css  js  c++  java
  • Algs4-1.3.31实现双向链表

    1.3.31实现一个嵌套类DoubleNode用来构造双向链表,其中每个结点都含有一个指向前驱元素的引用和一项指向后续元素引用(如果不存在则为null)。为以下任务实现若干静态方法:在表头插入结点、在表尾插入结点、从表头删除结点、从表尾删除结点、在指定结点之前插入新结点、在指定的结点之后插入新结点、删除指定结点。
    public class Node<Item>
        {
            Item item;
            Node prev;
            Node next;
        }

    public class LinkedListOfDouble
    {
        public static void insertBeforeFirst(Node first,Node newNode)
        {
            newNode.prev=null;
            newNode.next=first;
            first.prev=newNode;
        }
       
        public static void insertAfterTail(Node first,Node newNode)
        {
            Node current=new Node();
            current.next=first;
            while(current.next!=null)
                current=current.next;
            current.next=newNode;
            newNode.prev=current;
        }
       
        public static Node deleteFirst(Node first)
        {
            if(first==null) return null;
            Node newFirst=first.next;
            newFirst.prev=null;
            first.next=null;
            return newFirst;
        }
       
        public static Node deleteTail(Node first)
        {
            if(first==null) return null;
            Node current= new Node();
            current.next=first;
            while(current.next!=null)
               current=current.next;
            current.prev.next=null;
            current.prev=null;
            return current;
        }
       
        public static void insertBefore(Node current,Node newNode)
        {
            newNode.prev=current.prev;
            newNode.next=current;
            current.prev=newNode;
        }
       
        public static void insertAfter(Node current,Node newNode)
        {
            newNode.prev=current;
            newNode.next=current.next;
            current.next=newNode;
        }
       
        public static void delete(Node deleteNode)
        {
            if(deleteNode.prev==null && deleteNode.next!=null)
            {
                deleteNode.next.prev=null;
                deleteNode.next=null;
            }
            else if(deleteNode.prev!=null && deleteNode.next==null)
            {
                deleteNode.prev.next=null;
                deleteNode.prev=null;
            }
            else if(deleteNode.prev==null && deleteNode.next==null)
            {
                deleteNode.prev=null;
                deleteNode.next=null;
            }
            else
            {
               deleteNode.prev.next=deleteNode.next;
               deleteNode.next.prev=deleteNode.prev;
               deleteNode.prev=null;
               deleteNode.next=null;
            }
        }
    }
  • 相关阅读:
    Java基础学习02--I/O字符流
    MacOS系统Web服务器
    git学习01--git基本命令
    dokcer学习02--Docker Compose基本使用
    dokcer学习01--docker安装(MacOS)与基本命令
    JVM学习01--JVM结构与代码存储位置
    奈氏准则和香农定理
    物理层接口特性、数据通信模型、物理层基本概念(数据、信号、码元 、信源、信道、信宿 、速率、波特、带宽)
    计算机网络第一章小结
    TCP/IP参考模型(应用层、传输层、网际层、网络接口层)、五层参考模型(应用层、传输层、网络层、数据链路层、物理层)、OSI与TCP/IP参考模型比较
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854302.html
Copyright © 2011-2022 走看看