日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 链表算法_JAVA数据结构与算法之链表(一)

發(fā)布時間:2025/3/21 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 链表算法_JAVA数据结构与算法之链表(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

單項鏈表

鏈表介紹:

鏈表是有序的列表,但是它在內存中是存儲如下

1)鏈表是以節(jié)點的方式來存儲, 是鏈式存儲

2) 每個節(jié)點包含 data 域, next 域:指向下一個節(jié)點.

3) 如圖:發(fā)現(xiàn) 鏈表的各個節(jié)點不一定是連續(xù)存儲.

4) 鏈表分 帶頭節(jié)點的鏈表和 沒有頭節(jié)點的鏈表,根據(jù)實際的需求來確定

單鏈表(帶頭結點) 邏輯結構示意圖如下

單鏈表的應用實例

1)第一種方式是添加節(jié)點時直接添加在鏈表尾部

2)第二種方式在添加節(jié)點時,根據(jù)排名將節(jié)點插入到指定位置(如果有這個排名,則添加失敗,并給出提示)

3)修改節(jié)點功能,通過遍歷找到該節(jié)點進行修改即可

4) 刪除節(jié)點,找到該節(jié)點,將該節(jié)點的上一個節(jié)點的下一個節(jié)點位置修改為該節(jié)點的下一個位置。示意圖:

代碼實現(xiàn)單鏈表的增刪改查

package com.pierce.algorithm;

class SingleLinkedList {

//先初始化一個頭節(jié)點, 頭節(jié)點不要動, 不存放具體的數(shù)據(jù)

private HeroNode head = new HeroNode(0, "", "");

//添加節(jié)點到單向鏈表

//思路,當不考慮編號順序時

//1. 找到當前鏈表的最后節(jié)點

//2. 將最后這個節(jié)點的 next 指向 新的節(jié)點

public void add(HeroNode heroNode) {

//因為 head 節(jié)點不能動,因此我們需要一個輔助遍歷 temp

HeroNode temp = head;

//遍歷鏈表,找到最后

while (true) {

//找到鏈表的最后

if (temp.next == null) {//

break;

}

//如果沒有找到最后, 將 temp 后移

temp = temp.next;

}

//當退出 while 循環(huán)時,temp 就指向了鏈表的最后

//將最后這個節(jié)點的 next 指向 新的節(jié)點

temp.next = heroNode;

}

//第二種方式在添加英雄時,根據(jù)排名將英雄插入到指定位置

//(如果有這個排名,則添加失敗,并給出提示)

public void addByOrder(HeroNode heroNode) {

//因為頭節(jié)點不能動,因此我們仍然通過一個輔助指針(變量)來幫助找到添加的位置

//因為單鏈表,因為我們找的 temp 是位于 添加位置的前一個節(jié)點,否則插入不了

HeroNode temp = head;

boolean flag = false; // flag 標志添加的編號是否存在,默認為 false

while (true) {

if (temp.next == null) {//說明 temp 已經(jīng)在鏈表的最后

break; //

}

if (temp.next.no > heroNode.no) { //位置找到,就在 temp 的后面插入

break;

} else if (temp.next.no == heroNode.no) {//說明希望添加的 heroNode 的編號已然存在

flag = true; //說明編號存在

break;

}

temp = temp.next; //后移,遍歷當前鏈表

}

//判斷 flag 的值

if (flag) { //不能添加,說明編號存在

System.out.printf("準備插入的英雄的編號 %d 已經(jīng)存在了, 不能加入\n", heroNode.no);

} else {

//插入到鏈表中, temp 的后面

heroNode.next = temp.next;

temp.next = heroNode;

}

}

//修改節(jié)點的信息, 根據(jù) no 編號來修改,即 no 編號不能改.

//說明

//1. 根據(jù) newHeroNode 的 no 來修改即可

public void update(HeroNode newHeroNode) {

//判斷是否空

if (head.next == null) {

System.out.println("鏈表為空~");

return;

}

//找到需要修改的節(jié)點, 根據(jù) no 編號

//定義一個輔助變量

HeroNode temp = head.next;

boolean flag = false; //表示是否找到該節(jié)點

while (true) {

if (temp == null) {

break; //已經(jīng)遍歷完鏈表

}

if (temp.no == newHeroNode.no) {

//找到

flag = true;

break;

}

temp = temp.next;

}

//根據(jù) flag 判斷是否找到要修改的節(jié)點

if (flag) {

temp.name = newHeroNode.name;

temp.nickname = newHeroNode.nickname;

} else { //沒有找到

System.out.printf("沒有找到 編號 %d 的節(jié)點,不能修改\n", newHeroNode.no);

}

}

//刪除節(jié)點

//思路

//1. head 不能動,因此我們需要一個 temp 輔助節(jié)點找到待刪除節(jié)點的前一個節(jié)點

//2. 說明我們在比較時,是 temp.next.no 和 需要刪除的節(jié)點的 no 比較

public void del(int no) {

HeroNode temp = head;

boolean flag = false; // 標志是否找到待刪除節(jié)點的

while (true) {

if (temp.next == null) { //已經(jīng)到鏈表的最后

break;

}

if (temp.next.no == no) {

//找到的待刪除節(jié)點的前一個節(jié)點 temp

flag = true;

break;

}

temp = temp.next; //temp 后移,遍歷

}

//判斷 flag

if (flag) { //找到

//可以刪除

temp.next = temp.next.next;

} else {

System.out.printf("要刪除的 %d 節(jié)點不存在\n", no);

}

}

//顯示鏈表[遍歷]

public void list() {

//判斷鏈表是否為空

if (head.next == null) {

System.out.println("鏈表為空");

return;

}

//因為頭節(jié)點,不能動,因此我們需要一個輔助變量來遍歷

HeroNode temp = head.next;

while (true) {

//判斷是否到鏈表最后

if (temp == null) {

break;

}

//輸出節(jié)點的信息

System.out.println(temp);

//將 temp 后移, 一定小心

temp = temp.next;

}

}

}

實體類

package com.pierce.algorithm;

class HeroNode {

public int no;

public String name;

public String nickname;

public HeroNode next; //指向下一個節(jié)點

//構造器

public HeroNode(int no, String name, String nickname) {

this.no = no;

this.name = name;

this.nickname = nickname;

}

//為了顯示方法,我們重新 toString

@Override

public String toString() {

return "HeroNode [no=" + no + ", name=" + name + ", nickname=" + nickname + "]";

}

}

總結

以上是生活随笔為你收集整理的java 链表算法_JAVA数据结构与算法之链表(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。