707 設計單鏈表

2022-09-02 10:30:12 字數 1605 閱讀 7183

設計鍊錶的實現。您可以選擇使用單鏈表或雙鏈表。單鏈表中的節點應該具有兩個屬性: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,完成依次...