單鏈表的介紹及基礎操作

2021-10-07 00:20:56 字數 3122 閱讀 2588

1.單鏈表介紹

鍊錶是有序的列表,但是它在記憶體中是儲存如下

鍊錶是以節點的方式來儲存,是鏈式儲存

如圖:發現鍊錶的各個節點不一定是連續儲存.

鍊錶分帶頭節點的鍊錶和沒有頭節點的鍊錶,根據實際的需求來確定

2.增刪改查操作(有頭結點)

//新增結點到單向鍊錶

//思路:當不考慮編號的時候

//1.找到鍊錶最後的結點

//2.將這個結點的next指向這個新新增的結點

public

void

add(heronode heronode)

temp = temp.next;

}//最後乙個節點的next指向新新增的結點

temp.next = heronode;

}

考慮編號時:

//在新增英雄時,根據排名將英雄插入到指定位置

//如果有這個排名,則新增失敗,並給出提示

public

void

addbyorder

(heronode heronode)

if(temp.next.no > heronode.no)

else

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

temp = temp.next;}if

(flag)

else

}

//刪除結點

//思路:

結點不能動,需要乙個輔助變數,去找到待刪除結點的前乙個結點

//2.在比較no時,比較的是temp.next.no 和待刪除結點的no

public

void

del(

int no)

if(temp.next.no == no)

temp = temp.next;}if

(flag)

else

}

改:

//根據編號no 修改結點的資訊

public

void

update

(heronode newheronode)

//需要乙個輔助結點來幫助找到需要修改的結點的位置

heronode temp = head;

boolean flag =

false

;//表示是否找到該就結點

while

(true)if

(temp.no == newheronode.no)

temp = temp.next;}if

(flag)

else

}

//遍歷鍊錶

public

void

list()

//遍歷輸出鍊錶

/*while (true)

system.out.println(temp.tostring());

//將輔助結點指向下乙個結點

temp = temp.next;

}*///上面的遍歷輸出也可以這樣寫

while

((temp = temp.next)

!= null)

}

//方法:獲得單鏈表結點的個數(如果是帶頭結點的單鏈表,需要不統計頭結點)

public

static

intgetlength

(heronode head)

int length =0;

//定義乙個輔助變數用於遍歷

heronode cur = head.next;

while

(cur != null)

return length;

}

//方法:查詢單鏈表中倒數第k個結點

//思路:

//1.編寫乙個方法,接收頭結點head,同時接收乙個index(表示是倒數的第k個結點)

//2.先把遍歷鍊錶,得到鍊錶的長度length

//3.得到size後,在從鍊錶的第乙個結點開始遍歷(size-index)個,就可以得到單鏈表的倒數第k個結點

//4.如果找到了則返回該結點,如果沒有則返回null

public

static heronode findlastindexnode

(heronode head,

int index)

//獲取單鏈表長度

int size =

getlength

(head)

;//做index的校驗

if(index <=

0|| index > size)

//定義乙個輔助變數

heronode cur = head.next;

for(

int i =

0; i <

(size - index)

; i++

)return cur;

}

//將單鏈表進行反轉

public

static

void

reverselist

(heronode head)

//定義乙個輔助變數 用於遍歷單鏈表

heronode cur = head.next;

//用於指向當前結點的下乙個節點

heronode next = null;

//重新定義乙個頭結點,用於儲存反轉過後的鍊錶資訊

heronode reversehead =

newheronode(0

,"",""

);//遍歷原鍊錶,每遍歷乙個節點,就將其取出並放在reversehead的最前端

while

(cur != null)

//將head.next指向已經反轉的鍊錶的next

head.next = reversehead.next;

}

單鏈表的基礎操作

單鏈表的基礎操作 包括 查詢 插入 刪除 建立鍊錶等。以下直接用程式進行說明 include malloc free 標頭檔案 include 節點定義 typedef struct node node 查詢第乙個值為x的節點 node serach node phead,int x 在p節點之後進...

單鏈表及雙鏈表操作

0.刪除 單鏈表 若要刪除乙個節點p,需知道前乙個節點的位置 node searchpr node h,int k return null 沒有值為k的節點,返回空 void deletnode node h,int k 0.1.節點定義 typedef struct nodenode 1.鍊錶建立...

單鏈表的建立及操作

1 單鏈表的結構體演算法 typedef char elemtype typedef struct node lnode,linklist lnode為結點型別,linklist為指向結點的指標型別 2 建立單鏈表 1 頭插法 從表尾到表頭逆向建立 演算法思路 1 首先建立乙個頭結點h,並使頭結點的...