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,並使頭結點的...