java實現雙向連結串列
之前分析了單連結串列的增刪改查操作,雙連結串列操作只是在此基礎上稍微修改一下,可以作圖輔助分析,這裡直接上完整的程式碼。測試某個函式功能直接呼叫就行。新加了一個findforwardnode函式可以查詢當前節點的前一個節點,可以測試是否是雙向連結串列。
package com.linear.test;
/**
* @author ymm
* @create 2020-10-05 19:31
*/
public class DoubleLinkList {
public static void main(String []args)
{
Doublelist list = new Doublelist();
HeroNode2 link1=new HeroNode2(1,"宋江","及時雨");
HeroNode2 link2=new HeroNode2(2,"盧俊義","玉麒麟");
HeroNode2 link3=new HeroNode2(3,"吳用","智多星");
HeroNode2 link4=new HeroNode2(4,"林沖","豹子頭");
HeroNode2 link5=new HeroNode2(1,"lingchong","baozitou");
list.AddByOrder(link1);
list.AddByOrder(link4);
list.AddByOrder(link3);
list.AddByOrder(link2);
//list.update(link5);
list.travel();
}
}
class Doublelist{
HeroNode2 head = new HeroNode2(0,"","");
//尾插連結串列,測試成功不報錯
public void AddInTail(HeroNode2 newNode)
{
HeroNode2 temp=head;
while(temp.next!=null)
{
if(temp.heronum== newNode.heronum)
{
System.out.println("節點已經存在。不可重複插入\n");
return;
}
temp=temp.next;
}
temp.next=newNode;
newNode.pre=temp;
newNode.next=null;
}
//頭插雙連結串列,查詢重複插入還是要遍歷連結串列
public void AddInHead(HeroNode2 newNode)
{
if(head.next==null) //插入第一個節點時
{
head.next=newNode;
newNode.pre=head;
}
//不只一個節點時
else
{
newNode.next=head.next;
head.next.pre=newNode;
head.next=newNode;
newNode.pre=head;
}
}
//編號順序插入,不同於單連結串列,可以直接定位到帶插入位置處,因為可以雙向連結串列可以找到前一個節點
public void AddByOrder(HeroNode2 newNode)
{
HeroNode2 temp=head;
boolean flag=false;
while(true)
{
//這裡如果是1>4,現在插入3就不對,因為滿足第一條件,還是要找前一個節點輔助
if(temp.next==null) //遍歷到頭就尾插
{
temp.next=newNode;
newNode.pre=temp;
flag=true;
}
if(temp.next.heronum> newNode.heronum) //找到位置節點,在節點之前的位置插入就可,和單連結串列相似就是沒想出來
{
newNode.next=temp.next;
temp.next.pre=newNode;
temp.next=newNode;
newNode.pre=temp;
flag=true;
}
if(temp.heronum==newNode.heronum)
{
System.out.print("節點已經存在,不可插入\n");
}
temp=temp.next;
if(flag)
return;
}
}
//測試一下是否是雙連結串列,測試成功,可以找到前一個節點
public void findforwardnode(int number)
{
HeroNode2 temp = head.next;
while(temp!=null)
{
if(temp.heronum==number)
{
System.out.print("前一個節點為");
System.out.println(temp.pre);
return ;
}
temp=temp.next;
}
System.out.print("找不到對應的節點\n");
}
//遍歷連結串列
public void travel() {
if (head.next == null) {
System.out.print("連結串列為空\n");
return;
}
else {
HeroNode2 temp = head.next;
while (temp != null) {
System.out.println(temp);
temp = temp.next;
}
}
}
//按照編號刪除節點,測試成功
public void delete(int number)
{
HeroNode2 temp=head;
boolean flag=false;
while(temp!=null)
{
if(temp.heronum==number)
{
if(temp.next==null) //最後一個節點比較特殊
temp.pre.next=temp.next;
else
{
temp.pre.next=temp.next;
temp.next.pre=temp.pre;
}
flag=true;
}
temp=temp.next;
if(flag)
return ;
}
System.out.print("刪除節點編號不存在\n");
return ;
}
//按序號更新資訊,和刪除類似,編號不能更改
public void update(HeroNode2 newNode)
{
HeroNode2 temp = head.next;
while(true)
{
if(temp==null)
{
System.out.print("待更新的節點找不到\n");
return ;
}
if(temp.heronum==newNode.heronum)
{
temp.heroname=newNode.heroname;
temp.heroNickName=newNode.heroNickName;
return;
}
temp=temp.next;
}
}
}
//定義雙連結串列節點結構
class HeroNode2{
int heronum;
String heroname;
String heroNickName;
HeroNode2 next;
HeroNode2 pre;
public HeroNode2(int heronum,String heroname,String hreoNickName)
{
this.heronum=heronum;
this.heroname=heroname;
this.heroNickName=hreoNickName;
}
@Override
public String toString() {
return " [heronum=" + heronum + ", heroname=" + heroname + ", heroNickName=" + heroNickName + "]";
}
}
相關文章
- Java雙向連結串列的實現Java
- 實現雙向連結串列
- Go實現雙向連結串列Go
- JAVA基礎:語言中連結串列和雙向連結串列的實現(轉)Java
- 連結串列-雙向連結串列
- C++實現通用雙向連結串列C++
- 雙向連結串列的功能實現(初版
- 雙向連結串列
- 資料結構(雙向連結串列的實現)資料結構
- 資料結構-雙向連結串列(Python實現)資料結構Python
- MYSQL INNODB 中通用雙向連結串列的實現MySql
- 資料結構實驗之連結串列九:雙向連結串列資料結構
- javascript中的連結串列結構—雙向連結串列JavaScript
- 資料結構--陣列、單向連結串列、雙向連結串列資料結構陣列
- python 資料結構之雙向連結串列的實現Python資料結構
- go 實現單向連結串列Go
- 資料結構——雙向連結串列資料結構
- 資料結構:雙向連結串列資料結構
- 結構與演算法(03):單向連結串列和雙向連結串列演算法
- Java實現單向連結串列基本功能Java
- C語言之雙向連結串列C語言
- 雙向迴圈連結串列基本操作的實現(C語言)C語言
- 資料結構之雙向連結串列資料結構
- DoublyLinkedList(雙向連結串列)——Javascript版JavaScript
- 雙向連結串列 尾節點插入
- C 語言使用非迴圈雙向連結串列實現佇列佇列
- 演算法與資料結構-連結串列((linked-list)-Java實現單向連結串列演算法資料結構Java
- 單向迴圈連結串列的實現
- 資料結構與演算法——連結串列 Linked List(單連結串列、雙向連結串列、單向環形連結串列-Josephu 問題)資料結構演算法
- 連結串列-單連結串列實現
- 資料結構_連結串列_單向迴圈連結串列 & 雙向連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- java實現連結串列反轉Java
- 畫江湖之資料結構【第一話:連結串列】雙向連結串列資料結構
- 畫江湖之資料結構 [第一話:連結串列] 雙向連結串列資料結構
- 把BST轉換為雙向連結串列
- 雙向連結串列的建立及基本操作
- 【c# .net】雙向連結串列( LinkedList )C#
- Linux 核心資料結構:雙向連結串列Linux資料結構