中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中怎么對單鏈表進行增刪改查操作

發布時間:2021-06-22 17:35:04 來源:億速云 閱讀:138 作者:Leah 欄目:編程語言

Java中怎么對單鏈表進行增刪改查操作,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

一、新建學生節點類 Stu_Node節點包含:

學號:int num;

姓名:String name;

性別:String gender;

下一個節點:Stu_Node next;

為了便于打印節點內容需要重寫toString方法

class Stu_Node{ int num; String name; String gender; Stu_Node next;

[@Override](https://my.oschina.net/u/1162528)
public String toString() {
    return "Stu_Node{" +
            "num=" + num +
            ", name='" + name + '\'' +
            ", gender='" + gender + '\'' +
            '}';
}
public Stu_Node(int num, String name, String gender){
    this.num=num;
    this.name=name;
    this.gender=gender;
}

} 二、新建一個操作鏈表的類,實現增刪改查方法 1>創建鏈表的實現類對象 class SingleLinkedList{

} 2>在類里實現尾結點添加鏈表節點方法 1、定義一個頭結點head為空。

2、定義一個節點變量temp等于頭結點head。

3、遍歷鏈表找到尾結點。

while循環,結束的標志是temp的下一個節點為空,此時終止while(否則程序會陷入死循環),循環每進行一次要把temp節點的下一個節點賦值給temp變量(否則程序會陷入死循環)。

4、使temp節點的下一個節點指向新增的節點。

class SingleLinkedList{ Stu_Node head = new Stu_Node(0,"null","null"); //鏈表的尾節點添加方法 public void add(Stu_Node node){ Stu_Node temp = head; while(true){ if (temp.next==null){ break; } temp = temp.next; } temp.next=node; }

} 按學號順序插入節點

1、新建臨時節點temp

2、新建boolean變量flag用于找到當前帶插入節點的位置

3、while循環遍歷鏈表找到插入節點位置,如果temp的下一節點為空表示鏈表已經遍歷完畢此時終止循環;如果temp的下一節點的學號等于要插入的節點學號,此時將flag變量賦值為true結束循環(帶插入的節點已經存在插入失敗);如果temp節點的下一節點的學號大于帶插入節點的學號,此時temp下一節點指向的位置就是要插入的位置。每次鏈表遍歷一次節點要將temp的下一節點賦值給temp節點避免死循環。

4、如果flag為真表示,要插入的節點已經存在,輸出插入失敗;如果flag為假,令插入節點的下一節點指向temp的下一節點,temp節點的下一節點指向帶插入節點。(畫圖方便理解,圖自行腦補)

public void addOrder(Stu_Node node){ Stu_Node temp = head; boolean flag = false; while(true){ if (temp.next==null) break; if (temp.next.num >node.num){ break; } else if (temp.next.num==node.num){ flag = true; break; } temp=temp.next; } if (flag){ System.out.println("插入失敗"); } else{ node.next=temp.next; temp.next=node; }

}

3>打印鏈表 1、判斷頭結點的下一個節點是否為空,如果為空輸出鏈表為空。

2、定義一個temp節點變量,將頭結點的指向的節點賦值給temp。

3、遍歷鏈表打印節點數據。 while循環,打印鏈表節點,每打印一次temp節點,使temp節點的下一節點賦值給temp避免程序陷入死循環,循環結束標志是temp的節點為空(因為temp節點是頭結點head的下一節點)。

class SingleLinkedList{ Stu_Node head = new Stu_Node(0,"null","null"); //打印單鏈表 public void print(){ if (head.next==null){ System.out.println("鏈表為空"); } Stu_Node temp = head.next; while(true){ if (temp==null){ break; } System.out.println(temp); temp=temp.next; } } } 4>修改鏈表中的數據(假設學號為維一值) 1、首先判斷鏈表是否為空

2、定義一個臨時變量temp將頭結點賦值給temp

3、定義一個Boolean變量flag用于判斷鏈表中是否存在要修改的節點。

4、遍歷鏈表,while循環查詢要修改的節點,每查詢一次就將temp變量賦值為temp的next節點,如果查詢到要修改的節點將flag變量賦值為真、終止while循環,如果temp的下一節點為空表示未找到要修改的節點變量,此時也終止循環。

5、判斷flag值為真代表找到當前要修改的節點,將要新的節點的值賦值給要修改節點的值;如果flag為假表示未找到當前節點。

class SingleLinkedList{ Stu_Node head = new Stu_Node(0,"null","null"); //鏈表的修改方法 public void update(Stu_Node newnode){ if (head.next==null){ System.out.println("鏈表為空"); } Stu_Node temp = head; boolean flag = false; while (true){ if (temp.next==null){ break; } if (temp.num== newnode.num){ flag = true; break; } temp=temp.next; } if (flag){ temp.name=newnode.name; temp.gender= newnode.gender; } else System.out.println("當前節點不存在,無法修改!"); } } 5>依據學號刪除節點 1、定義一個臨時節點temp,將頭結點賦值給temp

2、定義一個boolean型變量flag用于判斷是否找到當前鏈表中待刪除的節點

3、while循環遍歷當前鏈表,每遍歷一次節點,將temp節點的下一節點賦值給temp避免循環,如果待刪除節點的學號跟要刪除的節點的學號一至,將flag賦值為true終止while循環,否則持續遍歷鏈表直到temp節點的下一節點為空終止循環。

4、如果flag為真,代表找到當前要刪除的節點,將temp的下一節點指向temp下一節點的下一節點。,如果flag為假代表找不到待刪除的節點。

class SingleLinkedList{ Stu_Node head = new Stu_Node(0,"null","null"); //刪除鏈表的節點 public void delete(int no){ Stu_Node temp = head; boolean flag = false; while(true){ if (temp.next==null) break; if (temp.next.num==no){ flag=true; break; } temp = temp.next; } if (flag){ temp.next=temp.next.next; } else{ System.out.println("未找到要刪除的鏈表"); }

}

} 三、新建操作鏈表類的實現類實現其增刪改查功能 1、新建操作鏈表類的實現類對象

2、新建多個待操作的節點

3、使用新建的鏈表操作類對象進行增刪改查功能

完整代碼如下:

public class linkedlist { public static void main(String[] args) { SingleLinkedList list = new SingleLinkedList(); Stu_Node node1 = new Stu_Node(1903210086,"小明","男"); Stu_Node node2 = new Stu_Node(1903210087,"小花","女"); Stu_Node node3 = new Stu_Node(1903210088,"小黃","男"); Stu_Node node4 = new Stu_Node(1903210089,"小翠","女"); list.add(node1); list.add(node4); list.add(node3); list.add(node2); list.print(); System.out.println("----------------------"); System.out.println("按學號順序插入節點"); SingleLinkedList list_1= new SingleLinkedList(); list_1.addOrder(node1); list_1.addOrder(node4); list_1.addOrder(node3); list_1.addOrder(node2); list_1.print(); System.out.println("-----------------------"); Stu_Node node5 = new Stu_Node(1903210089,"賈明","男"); list.update(node5); list.print(); System.out.println("#######################"); System.out.println("刪除之后的鏈表"); list.delete(1903210088); list.print(); } } class Stu_Node{ int num; String name; String gender; Stu_Node next;

[@Override](https://my.oschina.net/u/1162528)
public String toString() {
    return "Stu_Node{" +
            "num=" + num +
            ", name='" + name + '\'' +
            ", gender='" + gender + '\'' +
            '}';
}
public Stu_Node(int num, String name, String gender){
    this.num=num;
    this.name=name;
    this.gender=gender;
}

}

class SingleLinkedList{ Stu_Node head = new Stu_Node(0,"null","null"); //鏈表的尾節點添加方法 public void add(Stu_Node node){ Stu_Node temp = head; while(true){ if (temp.next==null){ break; } temp = temp.next; } temp.next=node; } public void addOrder(Stu_Node node){ Stu_Node temp = head; boolean flag = false; while(true){ if (temp.next==null) break; if (temp.next.num >node.num){ break; } else if (temp.next.num==node.num){ flag = true; break; } temp=temp.next; } if (flag){ System.out.println("插入失敗"); } else{ node.next=temp.next; temp.next=node; }

}
public void print(){
    if (head.next==null){
        System.out.println("鏈表為空");
    }
    Stu_Node temp = head.next;
    while(true){
        if (temp==null){
            break;
        }
        System.out.println(temp);
        temp=temp.next;
    }
}
public void update(Stu_Node newnode){
    if (head.next==null){
        System.out.println("鏈表為空");
    }
    Stu_Node temp = head;
    boolean flag = false;
    while (true){
        if (temp.next==null){
            break;
        }
        if (temp.num== newnode.num){
            flag = true;
            break;
        }
        temp=temp.next;
    }
    if (flag){
        temp.name=newnode.name;
        temp.gender= newnode.gender;
    }
    else
        System.out.println("當前節點不存在,無法修改!");
}
public void delete(int no){
    Stu_Node temp = head;
    boolean flag = false;
    while(true){
        if (temp.next==null)
            break;
        if (temp.next.num==no){
            flag=true;
            break;
        }
        temp = temp.next;
    }
    if (flag){
        temp.next=temp.next.next;
    }
    else{
        System.out.println("未找到要刪除的鏈表");
    }

}

關于Java中怎么對單鏈表進行增刪改查操作問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

崇礼县| 虞城县| 黎平县| 蕉岭县| 噶尔县| 兴业县| 游戏| 乐昌市| 通河县| 阿坝| 开封市| 黄陵县| 玉山县| 都江堰市| 浑源县| 溆浦县| 遵义市| 邢台县| 松阳县| 渑池县| 宜州市| 稻城县| 江北区| 崇仁县| 普陀区| 安庆市| 定州市| 阿拉尔市| 鄂尔多斯市| 阿克陶县| 筠连县| 仪征市| 张家口市| 林周县| 阳朔县| 德兴市| 阿合奇县| 湛江市| 左权县| 彝良县| 北辰区|