java實作單鍊錶、雙向鍊錶
本文實例為大家分享了java實作單鍊錶、雙向鍊錶的相關程式碼,供大家參考,具體內容如下
java實作單鍊錶:
package code; class Node { Node next; int data; public Node(int data) { this.data=data; } } class LinkList { Node first; //头部 public LinkList() { this.first=null; } public void addNode(Node no) { no.next=first; first=no;//在头部添加 } public void delectNode() { Node n=first.next; first=null; first=n;//在头部删除 } //删除指定位置 public int Number() { int count=1; //查看有多少元素 Node nd=first; while(nd.next!=null) { nd=nd.next; count++; } return count; } public void delectExact(int n) { //删除指定位置 if(n>1) { int count=1; Node de=first; while(count<n-1) { de=de.next; count++; } de.next=de.next.next; } else first=first.next; } public void addExact(int n,Node nd) { if(n>1)//添加指定位置 { int count=1; Node de=first; while(count<n-1) { de=de.next; count++; } nd.next=de.next; de.next=nd; } else first=first.next; } public int findNode(int n) { int count=1;//查找一个数对应的位置 Node de=first; while(de.data!=n) { de=de.next; count++; if(de==null) { return -1; } } return count; } public void print() { Node no=first;//打印所有 while(no!=null) { System.out.println(no.data); no=no.next; } } } public class TextNode { public static void main(String[] args) { LinkList ll=new LinkList(); ll.addNode(new Node(12)); ll.addNode(new Node(15)); ll.addNode(new Node(18)); ll.addNode(new Node(19)); ll.addNode(new Node(20)); /*System.out.println(ll.first.data); ll.delectNode(); System.out.println(ll.first.data);*/ System.out.println(ll.Number()); ll.delectExact(3); ll.addExact(3, new Node(100)); System.out.println(ll.Number()); // ll.print(); System.out.println(ll.findNode(112)); } }
登入後複製
java實作雙向鍊錶:
public class DoubleLink { public static void main(String[]args) { Node2 no=new Node2(5); no.addLeft(new Node2(6)); no.addRight(new Node2(7)); /*no.print(); no.print2();*/ no.addExact2(1, new Node2(8)); no.print(); System.out.println("--------------"); no.print2(); } } class Node2 { public Node2 first; public Node2 end; public Node2 left; public Node2 right; int data=0; public Node2(int n) { first=this; end=this; first.data=n; } //从头部添加 public void addLeft(Node2 before) { first.left=before; before.right=first; first=before; } //从尾部添加 public void addRight(Node2 after) { end.right=after; after.left=end; end=after; } //插入正数(第三声)的第几个 public void addExact(int n,Node2 no) { int count=0; if(n==0) { addLeft(no); } else { Node2 f=first; while(true) { f=f.right; count++; if(count==n) { //此处为四个指针的指向的变化 no.left=f.left; f.left.right=no; // first.left=no; no.right=f; f.left=no; break; } } } } //插入倒数的第几个 public void addExact2(int n,Node2 no) { int count=0; if(n==0) { addRight(no); } else { Node2 f=end; while(true) { f=f.left; count++; if(count==n) { no.left=f; no.right=f.right; f.right.left=no; f.right=no; break; } } } } //正序遍历 public void print() { System.out.println(first.data); while(first.right!=null) { System.out.println(first.right.data); first=first.right; } // System.out.println(end.data); } //倒序遍历 public void print2() { System.out.println(end.data); while(end.left!=null) { System.out.println(end.left.data); end=end.left; } } } /*值得注意的是,每一次插入一个新的对象的时候,需要注意指针指向的改变。 首先是这个新的对象两边的指向(左和右),其次是时左边的对象向右的指向 和右边对象向左的指向。 这四个指针的指向必须正确,否则可能导致正序或者倒序遍历无法实现。 */ /*对比单链表,单链表只能从一个方向遍历,因为只有一个头,而双向链表,有头和尾,可以从 * 头遍历,也可以从尾遍历,而且其中一个对象因为有两个方向的指针,所以他可以获得左边的 * 对象也可以获得右边的对象。 * 但是单链表的话,因为只有一个方向,所以只能向左或右。添加对象的时候,双向也可以从头添加,也可以从尾添加。 * 如果单链表要实现两个方向添加比较难得,或者说不行,因为他只有向左或向右的一个方向的指针 * 而双向链表每个对象都有两个方向的指针没这样更灵活,但是这同样有缺点,因为这样的话每个对象 * 都会包含两个指针,这同样内存会消耗更多。 * * */
登入後複製
以上就是本文的全部內容,希望對大家學習java程式設計有幫助。
更多java實作單鍊錶、雙向鍊錶相關文章請關注PHP中文網!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章
Windows 11 KB5054979中的新功能以及如何解決更新問題
3 週前
By DDD
如何修復KB5055523無法在Windows 11中安裝?
2 週前
By DDD
Inzoi:如何申請學校和大學
4 週前
By DDD
如何修復KB5055518無法在Windows 10中安裝?
2 週前
By DDD
Roblox:Dead Rails - 如何召喚和擊敗Nikola Tesla
1 個月前
By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

在使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名以構建查詢條件,是一個常見的難題。本文將針...
