java链表需要自己编写么_基于java的链表基础操作
鏈表結(jié)構(gòu)是由一個(gè)或一個(gè)以上再內(nèi)存上不連續(xù)存儲(chǔ)的元素結(jié)點(diǎn)連接而成的數(shù)據(jù)結(jié)構(gòu),鏈表的每個(gè)結(jié)點(diǎn)都有兩個(gè)部分,一個(gè)部分是存儲(chǔ)的數(shù)據(jù),另一部分是指向下一結(jié)點(diǎn)的指針,既是下一節(jié)點(diǎn)的引用。
首先鏈表一定有一個(gè)頭結(jié)點(diǎn),它是鏈表的第一個(gè)結(jié)點(diǎn),他是鏈表的第一個(gè)結(jié)點(diǎn),該結(jié)點(diǎn)的引用部分指向下一節(jié)點(diǎn),下一結(jié)點(diǎn)引用部分指向下下一結(jié)點(diǎn) 。。。。直到最后一個(gè)結(jié)點(diǎn),最后一個(gè)結(jié)點(diǎn)引用部分為空,標(biāo)志著鏈表的結(jié)束,整個(gè)存儲(chǔ)形式呈一個(gè)長鏈狀
鏈表的基礎(chǔ)操作分為 追加結(jié)點(diǎn) 遍歷結(jié)點(diǎn) 刪除結(jié)點(diǎn) 插入結(jié)點(diǎn)等
首先是鏈表結(jié)點(diǎn)類
public class LinearList {
//鏈表數(shù)據(jù)部分
int i;
//鏈表指針,既是鏈表對下一節(jié)點(diǎn)的引用
LinearList nextNode;
}
追加結(jié)點(diǎn)
/**
* 鏈表末尾追加節(jié)點(diǎn)
* @param head (頭節(jié)點(diǎn))
* @param i (追加節(jié)點(diǎn)的值)
* @return
*/
static int add(LinearList head,int i){
//判斷頭節(jié)點(diǎn)有沒有初始化
if(head == null){
return 0;
}
//保存頭節(jié)點(diǎn)引用
LinearList temp = head;
//實(shí)例化追加節(jié)點(diǎn),保存最佳節(jié)點(diǎn)數(shù)據(jù)
LinearList addNode = new LinearList();
addNode.i = i;
addNode.nextNode = null;
/**
* 循環(huán)至鏈表最后一個(gè)節(jié)點(diǎn)
*/
while(temp.nextNode!=null){
temp = temp.nextNode;
}
//鏈表最后一個(gè)節(jié)點(diǎn)的指針指向追加的節(jié)點(diǎn)
temp.nextNode = addNode;
return 1;
}
遍歷結(jié)點(diǎn)
/**
* 遍歷鏈表的所有結(jié)點(diǎn)
* @param head
*/
static void printNode(LinearList head){
if (head == null){
return;
}
while(head != null){
System.out.println("正在遍歷:"+head.i);
//該結(jié)點(diǎn)操作完成,指針下移到下一節(jié)點(diǎn)
head = head.nextNode;
}
}
刪除結(jié)點(diǎn)
/**
* 刪除指定節(jié)點(diǎn)
* 首先循環(huán)移動(dòng)指針查找到要?jiǎng)h除的結(jié)點(diǎn)
* 再通過指針互換使要?jiǎng)h除節(jié)點(diǎn)移出鏈表
* 返回值為頭節(jié)點(diǎn)
* 刪除頭節(jié)點(diǎn)則返回新的頭節(jié)點(diǎn)
*
*
* @param head
* @param delKey
* @return head
*/
static LinearList delete(LinearList head,int delKey){
LinearList node = null;
LinearList temp = null;
/**
* 如果要?jiǎng)h除的是頭節(jié)點(diǎn)
* 則返回刪除后新的頭節(jié)點(diǎn)
*
*/
if(head.i == delKey){
temp = head.nextNode;
head.nextNode = null;
return temp;
}
temp = head.nextNode;
while (temp != null){
if(temp.nextNode.i == delKey){
node = temp.nextNode.nextNode;
temp.nextNode = node;
return head;
}else{
temp = temp.nextNode;
}
}
return null;
}
插入結(jié)點(diǎn)
/**
* 在鏈表指定位置插入節(jié)點(diǎn)
* insertKey 插入節(jié)點(diǎn)的數(shù)據(jù)
* upperNodeKey 引用插入節(jié)點(diǎn)的元素的數(shù)據(jù)
*
* 通過find 方法返回鏈表中的插入位置的上一節(jié)點(diǎn)
* 改變插入節(jié)點(diǎn)的指針指向插入節(jié)點(diǎn)
* 插入節(jié)點(diǎn)的指針指向插入位置的下一節(jié)點(diǎn)
*
* @param head
* @param inserKey
* @param upperNodeKey
* @return
*/
static int insert(LinearList head,int inserKey,int upperNodeKey ){
//判斷頭節(jié)點(diǎn)有沒有初始化
if(head == null){
return 0;
}
//保存查找節(jié)點(diǎn)的結(jié)果
LinearList temp = find(head,upperNodeKey);
//保存temp 對下一節(jié)點(diǎn)的引用
LinearList temp1 = null;
//即將插入的新節(jié)點(diǎn)
LinearList insertNode = new LinearList();
insertNode.i = inserKey;
if (temp == null){
return 0;
}else{
//指針互換
temp1 = temp.nextNode;
temp.nextNode = insertNode;
insertNode.nextNode = temp1;
return 1;
}
}
總結(jié)
以上是生活随笔為你收集整理的java链表需要自己编写么_基于java的链表基础操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java soap封装_Java SOA
- 下一篇: java追加一个sheet_(二)POI