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;
            }
        }
    }
  • 相关阅读:
    计算机网络学习笔记:第九章.无线网络
    计算机网络学习笔记:第七章.网络安全与攻防
    seq命令的使用
    rm--删除文件或目录
    tar命令-解压和压缩文件
    CentOS最小化安装后找不到ifconfig命令
    shell 字符菜单管理
    linux passwd批量修改用户密码
    Linux shell 判断字符串为空等常用命令
    Linux 中find命令
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854302.html
Copyright © 2011-2022 走看看