<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了Java實現雙向連結串列的具體程式碼,供大家參考,具體內容如下
1.1 雙向連結串列的每個節點組成包含節點資料,上一個節點(pre),下一個節點(next)
1.2 雙向連結串列節點結構
class Node { //節點資料data int data; Node pre; Node next; public Node(int data) { this.data = data; } public Node() { super(); } }
2.1 雙向連結串列的增刪改查
public class DoubleLinkedList { private Node first; private Node current; private static class Node { int data; Node pre; Node next; public Node(int data) { super(); this.data = data; } public Node() { super(); } } public DoubleLinkedList() { super(); } /** * 雙向連結串列增加 */ public void add(int val) { // 如果是頭結點 if (first == null) { Node node = new Node(val); first = node; first.pre = null; first.next = null; current = first; } else { Node node = new Node(val); current.next = node; node.pre = current; current = node; } } /** * 雙向連結串列的刪除 刪除所有值為val的元素 */ public void del(int val) { if (first == null) { System.out.println("雙向連結串列為空,無法進行刪除操作!"); } else { Node node = first; while(true) { // 首節點的刪除可能 if (node.data == val) { //如果只有一個節點 if(node.next==null) { node=null; first=null; System.out.println("刪除所有的"+val+"成功"); return; }else { node = node.next; node.pre.next=null; node.pre=null; first=node; //刪除後重新迴圈判斷首節點是否值相等 continue; } } else { while (node.next != null) { if (node.data == val) { node.pre.next = node.next; node.next.pre = node.pre; Node tempNode = node.pre; node.pre=null; node.next=null; node = tempNode; } node = node.next; } // 末節點刪除可能 if (node.data == val) { node.pre.next=null; node.pre=null; } System.out.println("刪除所有的"+val+"成功"); //末節點判斷完成後,結束迴圈 return; } } } } /** * 遍歷雙向連結串列操作 */ public void traverse() { if(first==null) { System.out.println("雙向連結串列為空"); }else { Node node = first; //迴圈遍歷到倒數第二個節點截止 while(node.next!=null) { System.out.print(node.data+" "); node=node.next; } //遍歷最後一個節點 System.out.print(node.data); } } /** * 雙向連結串列插入操作,在所有值為value的後面插入一個數insert */ public void insert(int value,int insert) { if(first==null) { System.out.println("雙向連結串列為空,無法插入"); }else { Node node = first; //迴圈遍歷到倒數第二個節點截止 while(node.next!=null) { if(node.data==value) { Node insertNode = new Node(insert); node.next.pre = insertNode; insertNode.next = node.next; node.next = insertNode; insertNode.pre = node; } node=node.next; } //最後一個節點後插入 if(node.data == value) { Node insertNode = new Node(insert); node.next = insertNode; insertNode.pre = node; } System.out.println(); System.out.println("插入操作完成"); } } /** * 雙向連結串列修改資料,將所有值為val的修改為revised */ public void revise(int val,int revised) { if(first==null) { System.out.println("雙向連結串列為空,無法修改"); }else { Node node = first; while (node.next!=null) { if(node.data == val) { node.data = revised; } node=node.next; } if(node.data == val) {} node.data = revised; } System.out.println("修改操作完成"); } /** * 查詢雙向連結串列中是否包含val值 * @param val */ public void contain(int val) { if(first==null) { System.out.println("連結串列為空,無法查詢"); }else { Node node = first; while(node!=null) { if(node.data==val) { System.out.println("該連結串列中包含"+val+"的值"); return; }else { node=node.next; } } System.out.println("該連結串列不包含"+val); } } }
2.2 測試類(main入口函數)
public class Main { public static void main(String[] args) { DoubleLinkedList list = new DoubleLinkedList(); list.add(1); list.add(1); list.add(2); list.insert(1, 3); list.add(2); list.add(3); list.traverse(); System.out.println(); list.del(1); list.traverse(); list.add(4); System.out.println(); list.traverse(); System.out.println(); list.contain(4); list.contain(3); list.contain(0); } }
1)、迴圈結束是到倒數第二個節點截止的,要考慮多種不同的情況,頭節點刪除,尾結點刪除等,導致刪除函數複雜了很多
2)、在contain函數中有修改到迴圈到最後一個節點
3)、後續對刪除函數修改有空再操作(待完成)
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45