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;
            }
        }
    }
  • 相关阅读:
    SVG Stroke属性
    C# 线程同步之排它锁/Monitor监视器类
    在Mac OS X Yosemite 10.10.3 中搭建第一个 ASP.NET 5 Web 项目
    jquery 之 Deferred 使用与实现
    jQuery 之 Callback 实现
    在解决方案中所使用 NuGet 管理软件包依赖
    下载和使用 Open XML PowerTools
    下载和编译 Open XML SDK
    Open XML SDK 在线编程黑客松
    VS2013 解决方案文件结构分析
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9854302.html
Copyright © 2011-2022 走看看