導航:首頁 > 編程語言 > java單鏈表刪除

java單鏈表刪除

發布時間:2023-08-15 00:02:21

1. 用java語言實現單向鏈表

1.先定義一個節點類

package com.buren;

public class IntNode {
//定義一個節點類

int
info;
//定義屬性,節點中的值
IntNode next;
//定義指向下一個節點的屬性

public IntNode(int
i){ //構造一個next為空的節點
this(i,null);
}

public IntNode(int i,IntNode
n){ //構造值為i指向n的節點
info=i;
next=n;
}

}

2.再定義一個鏈表類,這是主要部分

package com.buren;

public class IntSLList {

private IntNode head,tail;
//定義指向頭結點和尾結點的指針,
//如果大家看著這個不像指針的話,那就需要對指針有更深刻的了解

public
IntSLList(){
//定義一個空節點
head=tail=null;
}

public boolean
isEmpty(){
//判斷節點是否為空
return
head==null;
//這行代碼看起來似乎很神奇,其實真的很神奇,偶是服了
}

public void addToHead(int el){
//將el插入到頭結點前
head=new
IntNode(el,head);
//將節點插入到頭結點前,作為新的投節點
if(head==tail){
//給空鏈表插入節點時
tail=head;
//頭結點和尾結點指向同一個節點
}
}

public void addToTail(int
el){
//向鏈表的尾部增加結點
if(!isEmpty()){
//判斷鏈表是否為空
tail.next=new
IntNode(el);
//新建立一個值為el的節點,將鏈表的尾結點指向新節點
tail=tail.next;
//更新尾指針的指向
}else{
head=tail=new
IntNode(el);
//如果鏈表為空,新建立一個節點,將頭尾指針同時指向這個節點
}
}

public int
deleteFromHead(){
//刪除頭結點,將節點信息返回
int
el=head.info;
//取出節點信息
if(head==tail){
//如果鏈表中只有一個節點
head=tail=null;
//刪除這一個節點
}else{
head=head.next;
//如果鏈表中不止一個節點,將頭結點的下一個節點作為頭結點
}
return
el;
//返回原頭結點的值
}

public int
deleteFromTail(){
//刪除尾結點,返回尾結點的信息
int
el=tail.info;
//取出尾結點的值
if(head==tail){
// 如果鏈表中只有一個節點
head=tail=null;
//刪除這個節點
}else{
IntNode
temp;
//定義中間變數
for(temp=head;temp.next!=tail;temp=temp.next);
//找出尾結點的前一個節點,注意最後的分號,

//這個for循環是沒有循環體的,目的在於找出尾結點的前一個節點

//在整個程序中用了很多次這樣的寫法,相當經典啊
tail=temp;
//將找出來的節點作為尾結點,刪除原來的尾結點
tail.next=null;
//將新尾結點的指向設為空
}
return
el;
//返回原尾結點的信息
}

public void
printAll(){
//列印鏈表中所有節點的信息
if(isEmpty()){
//如果鏈表為空
System.out.println("This
list is
empty!");
//輸出提示信息
return;
//返回到調用的地方
}
if(head==tail){
//當鏈表中只有一個節點時
System.out.println(head.info);
//輸出這個節點的信息,就是頭結點的信息
return;
}
IntNode
temp;
//定義一個中間變數
for(temp=head;temp!=null;temp=temp.next){
//遍歷整個鏈表
System.out.print(temp.info+"
");
//輸出每個節點的信息
}
System.out.println();
//輸出一個換行,可以沒有這一行
}

public boolean isInList(int
el){
//判斷el是否存在於鏈表中
IntNode
temp;
//定義一個中間變數
for(temp=head;temp!=null
&&
temp.info!=el;temp=temp.next);
//將el找出來,注意最後的分
return
temp!=null;
// 如果存在返回true,否則返回flase,這兩行代碼很有思想
}

public void delete(int
el){
//刪除鏈表中值為el的節點
if(head.info==el
&&
head==tail){
//如果只有一個節點,並且節點的值為el
head=tail=null;
//刪除這個節點
}else
if(head.info==el){
// 不止一個節點,而頭結點的值就是el
head=head.next;
//刪除頭結點
}else{
IntNode
pred,temp;
//定義兩個中間變數
for(pred=head,temp=head.next;temp.info!=el
&&
temp.next!=null;pred=pred.next,temp=temp.next);
//跟上面的類似,自己琢磨吧,也是要注意最後的分號
pred.next=temp.next;
//將temp指向的節點刪除,最好畫一個鏈表的圖,有助於理解
if(temp==tail){
//如果temp指向的節點是尾結點
tail=pred;
//將pred指向的節點設為尾結點,
}
}
}

//下面這個方法是在鏈表中值為el1的節點前面插入一個值為el2的節點,
//用類似的思想可以再寫一個在鏈表中值為el1的節點後面插入一個值為el2的節點
public boolean insertToList(int el1,int
el2){
//定義一個插入節點的方法,插入成功返回true,否則返回false
IntNode
pred,temp; //定義兩個中間變數
if(isEmpty()){
//判斷鏈表是否為空
return
false;
//如果鏈表為空就直接返回false
}
if(head.info==el1
&&
head==tail){
//如果鏈表中只有一個節點,並且這個節點的值是el1
head=new
IntNode(el2,head);
//新建立一個節點
return
true;
}else if(head.info==el1){
IntNode t=new
IntNode(el2);
t.next=head;
head=t;
return
true;
}else{
for(pred=head,temp=head.next;temp!=null
&&
temp.info!=el1;pred=pred.next,temp=temp.next);
if(temp!=null){
IntNode
a=new IntNode(el2);
pred.next=a;
a.next=temp;
return
true;
}else{
System.out.println(el1+"
NOT EXEISTS!");
return
false;
}
}
}

3.下面是測試代碼
public static void main(String[] args){
IntSLList test=new
IntSLList();

//test.addToHead(7);
test.addToTail(7);

System.out.println(test.insertToList(7,5));
test.printAll();
System.out.println(test.isInList(123));
}
}

2. java實現鏈表求救

importjava.util.Scanner;

publicclassNode{
privateintdata;
privateNodenext;

publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
Strings=sc.nextLine();
String[]numStr=s.split(",");
Nodehead=buildList(numStr);
printList(head);

Nodenode1=newNode();
node1.setData(100);
node1.setNext(null);
Nodenode2=newNode();
node2.setData(100);
node2.setNext(null);

Nodetemp=head;
node1.setNext(temp);
head=node1;
printList(head);

temp=head;
while(temp.getNext()!=null){
temp=temp.getNext();
}
temp.setNext(node2);
printList(head);
}

//構建鏈表
publicstaticNodebuildList(String[]numStr){
if(0==numStr.length){
returnnull;
}
Nodehead=newNode();
head.setData(Integer.parseInt(numStr[0]));
head.setNext(null);
Nodetemp=head;
for(inti=1;i<numStr.length;i++){
Nodenode=newNode();
node.setData(Integer.parseInt(numStr[i]));
node.setNext(null);
temp.setNext(node);
temp=node;
}
returnhead;
}

//輸出鏈表
publicstaticvoidprintList(Nodehead){
Nodetemp=head;
while(temp!=null){
System.out.print(temp.getData()+"--");
temp=temp.getNext();
}
System.out.println();
}

publicintgetData(){
returndata;
}

publicvoidsetData(intdata){
this.data=data;
}

publicNodegetNext(){
returnnext;
}

publicvoidsetNext(Nodenext){
this.next=next;
}
}

3. JAVA中LinkedList的底層實現是鏈表還是隊列

是鏈表實現,通過引用來找到前面或後面的對象,所以相對來說LinkedList插入、刪除操作比較快,查找較慢,是雙向鏈表。

4. 用java如何創建一個單鏈表和雙鏈表

單向鏈表

雙向鏈表

1.聽名字可能就能猜到雙向鏈表就是鏈表結點包含兩個指針,一個指針是指向下一個結點的,另一個指針當然就是指向上一個結點的。

2.雙向鏈表的初始化:由於這里的鏈表頭結點不參與計算,所以頭結點的pPre指針是一直指向NULL指針的。

3.雙向鏈表的創建過程:由於雙向鏈表的每個結點包含兩個指針那麼這個時候我們就要小心處理好每一個指針的指向,要不然會有很多意想不到的錯誤。同樣的,和單向鏈表的創建過程一樣,需要一個輔助指針來指向最後一個結點,然後每新建一個結點,這個結點的pNext指針都是指向NULL指針的,pPre指針指向上一個結點(這是和單向鏈表不同的地方),然後讓上一個指針的pNext指向新建的結點,這樣整個鏈表就連接起來了。

4.雙向鏈表插入結點過程:知道了雙向鏈表的創建過程,那麼插入結點的過程就大同小異 了,有一點需要特別注意的就是這里的變數position范圍也是從1到鏈表長度加1,但是如果待插入的位置是最後一個位置的話,情況就不同了,看到下面的圖我們可以很好的理解,因為沒新建一個結點的時候都需要處理兩個指針,而且新建結點的下一個結點的pPre指針就需要指向這個新建的結點,但是有可能這個新建的結點可能就已經是最後一個結點了,那麼這個時候再執行

ptemp->pNext->pPre=pnew;

這條指令的時候就會報錯了,因為ptemp->pNext已經是個NULL指針了,那空指針哪裡還有pPre呢。因此在程序中要進行一次判斷,看看結點是否是最後一個結點。

5.雙向鏈表刪除結點的過程:要注意的問題和插入結點一樣,看看這個結點是否為NULL。這里就不重復了。

5. java怎麼刪數組里的數據

數組刪除數據不是很方便的,因為中間空了,需要把刪除的index的後面的元素依次往前移動

如果不是一定要用數組,可以用java提供的 ArrayList 和 LinkedList,都有提供刪除元素的操作,不過後者底層是鏈表實現,刪除的效率很高, O(1) 的操作;ArrayList 效率低一些

閱讀全文

與java單鏈表刪除相關的資料

熱點內容
qd88yg壓縮機參數 瀏覽:381
pubg國際服伺服器有什麼區別 瀏覽:502
怎麼打開文件夾自動刪除 瀏覽:681
php中英文切換 瀏覽:441
php168數據 瀏覽:75
水壓縮後有彈性 瀏覽:42
蘇州阿里雲伺服器數據備份 瀏覽:522
消息提示音怎麼設置安卓 瀏覽:277
怎麼去掉安卓手機的小圓圈 瀏覽:474
女程序員每天教你一招 瀏覽:590
葯劑學pdf下載 瀏覽:477
打開的共享文件夾少東西 瀏覽:643
芝麻黑頭解壓去除視頻 瀏覽:186
光明與黑暗怎麼進入伺服器 瀏覽:659
20歲的程序員 瀏覽:238
p4備份伺服器是什麼意思 瀏覽:350
棗庄空氣壓縮機維修 瀏覽:621
色弱程序員 瀏覽:415
oraclelinux修改ip 瀏覽:665
雲上城之歌九游通用伺服器 瀏覽:348