設計鍊錶的實現。您可以選擇使用單鏈表或雙鏈表。單鏈表中的節點應該具有兩個屬性:val 和 next。val 是當前節點的值,next 是指向下乙個節點的指標/引用。如果要使用雙向鍊錶,則還需要乙個屬性 prev 以指示鍊錶中的上乙個節點。假設鍊錶中的所有節點都是 0-index 的。在鍊錶類中實現這些功能:
get(index):獲取鍊錶中第 index 個節點的值。如果索引無效,則返回-1。
addathead(val):在鍊錶的第乙個元素之前新增乙個值為 val 的節點。插入後,新節點將成為鍊錶的第乙個節點。
addattail(val):將值為 val 的節點追加到鍊錶的最後乙個元素。
addatindex(index,val):在鍊錶中的第 index 個節點之前新增值為 val 的節點。如果 index 等於鍊錶的長度,則該節點將附加到鍊錶的末尾。如果 index 大於鍊錶長度,則不會插入節點。
deleteatindex(index):如果索引 index 有效,則刪除鍊錶中的第 index 個節點。
示例:mylinkedlist linkedlist = new
mylinkedlist();
linkedlist.addathead(1);
linkedlist.addattail(3);
linkedlist.addatindex(1,2); //
鍊錶變為1-> 2-> 3
linkedlist.get(1); //
返回2linkedlist.deleteatindex(1); //
現在鍊錶是1-> 3
linkedlist.get(1); //
返回3class
mylinkedlist
public mylinkedlist(int
x)
public
int get(int
index)
return
a.val;
}public
void addathead(int
val)
public
void addattail(int
val)
head.next =node;
}public
void addatindex(int index, int
val)
else
if (index == this.length() + 1)
else
if (index <= 0)
else
mylinkedlist node = new
mylinkedlist(val);
node.next =head.next;
head.next =node;}}
public
void deleteatindex(int
index)
else
head.next =head.next.next;}}
public
intlength()
return
i; }
}
單鏈表的演算法設計
設計乙個演算法,刪除乙個單鏈表l中元素值最大的結點,題目保證最大值結點是唯一的。解 查詢最大值 用p指標遍歷鍊錶,maxp記錄最大值結點 刪除結點 用maxp記錄最大值的前趨結點,同時再增加pre指標實現maxp和maxpre的同步移動 該演算法的時間複雜度為o n 有乙個帶頭結點的非空單鏈表l,設...
單鏈表 排序之設計在單鏈表上設計選擇簡單排序
簡單選擇排序思想 對鍊錶遍歷的第i趟,就找到第i小的元素與第i個位置的元素進行交換,直至n 1趟後全部排序完成 設計三個指標,乙個指向編號為i的節點,乙個指向當前節點值最小的結點,乙個進行訪問 對鍊錶進行遍歷,每遍歷一次進行元素的交換,直至排序完成 void sort linklist l q q ...
單鏈表(合併單鏈表)
單鏈表遍歷 單鏈表遍歷是從單鏈表頭指標head開始訪問,沿著next指標所指示的方向依次訪問每乙個結點,且每個結點只能訪問依次,直到最後乙個結點為止。遍歷時注意,不要改變head指標的指向。因此一般設定另外的乙個指標變數如p,p從head開始依次訪問乙個結點,直到鍊錶結束,此時p null,完成依次...