首页 > 其他分享 >双链表

双链表

时间:2023-01-11 15:46:52浏览次数:42  
标签:getNext return temp DoubleNode doubleLinkedList 双链 newNode

图示:

 

 

代码:

 

 

  1 import lombok.Data;
  2 
  3 public class DoubleLinkedListTest {
  4     public static void main(String[] args) {
  5         DoubleNode node1 = new DoubleNode(1, "吕布");
  6         DoubleNode node2 = new DoubleNode(2, "典韦");
  7         DoubleNode node3 = new DoubleNode(3, "赵云");
  8         DoubleNode node4 = new DoubleNode(4, "关羽");
  9         DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
 10 //        doubleLinkedList.tailInsert(node1);
 11 //        doubleLinkedList.tailInsert(node4);
 12 //        doubleLinkedList.tailInsert(node2);
 13 //        doubleLinkedList.tailInsert(node3);
 14         doubleLinkedList.orderInsert(node1);
 15         doubleLinkedList.orderInsert(node4);
 16         doubleLinkedList.orderInsert(node2);
 17         doubleLinkedList.orderInsert(node3);
 18         doubleLinkedList.ascList();
 19         System.out.println("~~~~~~");
 20 //        doubleLinkedList.descList();
 21         DoubleNode node5 = new DoubleNode(0, "张飞");
 22         doubleLinkedList.updateByNo(node5);
 23         doubleLinkedList.ascList();
 24 //        doubleLinkedList.delByNo(5);
 25 //        doubleLinkedList.ascList();
 26 
 27     }
 28 }
 29 
 30 @Data
 31 class DoubleNode {
 32     /**
 33      * 编号
 34      */
 35     private int no;
 36 
 37     /**
 38      * 名称
 39      */
 40     private String name;
 41 
 42     private DoubleNode prev;
 43     private DoubleNode next;
 44 
 45     public DoubleNode() {
 46 
 47     }
 48 
 49     public DoubleNode(int no, String name) {
 50         this.no = no;
 51         this.name = name;
 52     }
 53 
 54     @Override
 55     public String toString() {
 56         return "DoubleNode{" +
 57                 "no=" + no +
 58                 ", name='" + name + '\'' +
 59                 '}';
 60     }
 61 }
 62 
 63 class DoubleLinkedList {
 64     private DoubleNode headNode;
 65 
 66     public DoubleLinkedList() {
 67         headNode = new DoubleNode();
 68     }
 69 
 70     /**
 71      * 尾部添加节点
 72      * @param newNode
 73      * @return
 74      */
 75     public boolean tailInsert(DoubleNode newNode) {
 76         DoubleNode temp = headNode;
 77         while (temp.getNext() != null) {
 78             temp = temp.getNext();
 79         }
 80         temp.setNext(newNode);
 81         newNode.setPrev(temp);
 82         return true;
 83     }
 84 
 85     /**
 86      * 按编号顺序插入
 87      * @param newNode
 88      * @return
 89      */
 90     public boolean orderInsert(DoubleNode newNode) {
 91         DoubleNode temp = headNode;
 92         while (temp.getNext() != null) {
 93             if (temp.getNext().getNo() == newNode.getNo()) {
 94                 System.out.println("已存在编号相同的节点,无法插入");
 95                 return false;
 96             }
 97             if (temp.getNext().getNo() > newNode.getNo()) {
 98                 newNode.setNext(temp.getNext());
 99                 newNode.setPrev(temp);
100                 temp.getNext().setPrev(newNode);
101                 temp.setNext(newNode);
102                 return true;
103             }
104             temp = temp.getNext();
105         }
106         //遍历到最后没有找到比newNode的编号大的,插在最后面
107         temp.setNext(newNode);
108         newNode.setPrev(temp);
109         return true;
110     }
111 
112     /**
113      * 正序遍历
114      */
115     public void ascList() {
116         DoubleNode temp = headNode;
117         while (temp.getNext() != null) {
118             System.out.println(temp.getNext());
119             temp = temp.getNext();
120         }
121     }
122 
123     /**
124      * 倒序遍历
125      */
126     public void descList() {
127         DoubleNode temp = headNode;
128         while (temp.getNext() != null) {
129             temp = temp.getNext();
130         }
131 
132         while (true) {
133             System.out.println(temp);
134             if (temp.getPrev() == headNode) {
135                 break;
136             }
137             temp = temp.getPrev();
138         }
139     }
140 
141     /**
142      * 根据编号修改节点
143      * @param newNode
144      * @return
145      */
146     public boolean updateByNo(DoubleNode newNode) {
147         DoubleNode temp = headNode.getNext();
148         while (temp != null) {
149             if (temp.getNo() == newNode.getNo()) {
150                 temp.setName(newNode.getName());
151                 return true;
152             }
153             temp = temp.getNext();
154         }
155         System.out.println("未找到需修改的节点");
156         return false;
157     }
158 
159     /**
160      * 根据编号删除节点
161      * @param no
162      * @return
163      */
164     public boolean delByNo(int no) {
165         DoubleNode temp = headNode.getNext();
166         while (temp != null) {
167             if (temp.getNo() == no) {
168                 temp.getPrev().setNext(temp.getNext());
169                 if (temp.getNext() != null) {
170                     temp.getNext().setPrev(temp.getPrev());
171                 }
172                 return true;
173             }
174             temp = temp.getNext();
175         }
176         System.out.println("未找到需删除的节点");
177         return false;
178     }
179 }

 

 

 

 

 

 

 

标签:getNext,return,temp,DoubleNode,doubleLinkedList,双链,newNode
From: https://www.cnblogs.com/xueseng/p/17043933.html

相关文章

  • list双链表
    structlistnode{structlistnode*next;structlistnode*prev;void*data;};structlist_head{ structlist_head*next,*prev;};/*Linkedlistof......
  • 双链表实现双端队列
    双链表实现双端队列双端队列是一个从两端都可以进行进队出队的队列。代码:/***使用双链表实现双端队列*双端队列也就是在队列的两端都可以进行出队列以及入队列......
  • 双链表
    实现一个双链表,双链表初始为空,支持5 种操作:在最左侧插入一个数;在最右侧插入一个数;将第k 个插入的数删除;在第k 个插入的数左侧插入一个数;在第k 个插入的数右侧插......
  • 双链表
    //e[]表示节点的值,l[]表示节点的左指针,r[]表示节点的右指针,idx表示当前用到了哪个节点inte[N],l[N],r[N],idx;//初始化voidinit(){//0是左端点,1是右端点......
  • 双链表实现栈,和队列
    packageclass03;importjava.util.LinkedList;importjava.util.Queue;importjava.util.Stack;/***双链表实现栈,和队列*/publicclassCode03_DoubleEndsQu......
  • 单链表,双链表反转
    packageclass03;importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;/***单链表,双链表反转*/publicclassCode01_ReverseLis......
  • JAVA--LinkedList底层双链表添加元素超详细
     集合里面存储的都是对象    添加第一个元素    添加第二个元素    依次往后添加对象/元素。   first指向linkedList集合里存储的第......
  • 双链表
    双向链表在双向链表中,每个结点都有两个指针域,用于存放前驱结点地址和后继结点地址。与单链表相比,双向链表可以进行两个方向的查找。1.初始化双向链表1.1双向链表的储存......
  • 双链表和循环链表
    一、结构体定义1.双链表typedefstructDLNode{ intdata; structDLNode*prior,*next;}DLNode;2.循环链表//同双链表二、操作1.尾插法建立双链表voidcreat......
  • WLAN下配置双链路冷备
    实验背景企业内网无线终端数量越来越多,为了保证无线业务的稳定性,作为网络工程师的你决定采购一台AC,部署双链路冷备技术,与原有的AC进行主备备份,提高无线业务的可靠性  ......