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;
            }
        }
    }
  • 相关阅读:
    phpstorm插件等相关推荐
    Item Pipeline
    没有返回值的构造函数是怎么完成赋值的?
    vue中如何实现点击变成全屏
    vue操作dom元素的三种方法
    陈同学整理的10个可以写到简历上C++项目
    从四个问题透析Linux下C++编译&链接
    C++隐式推导-auto关键词
    从今天起构建你的JavaScript世界
    vue中实现模态框弹出框动画(旋转弹出)
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854302.html
Copyright © 2011-2022 走看看