資料結構之鍊錶學習

2021-10-05 16:17:36 字數 2650 閱讀 4500

定義鍊錶的內部節點

public

class

node

最後乙個節點的next儲存的為空,喪失了隨機訪問的能力,適應索引沒有語義的情況。鍊錶的新增元素

鍊錶的增加節點(不帶頭節點)

public

class

linklist

//鍊錶首部新增元素,這時候是簡單的

public

void

addfrist

(e e)

//鍊錶的中間新增元素

public

void

add(

int index, e e)

node pre = head;

if(index ==0)

//找到插入的位置

for(

int i =

1; i < index; i++

)//然後進行新增

node node =

newnode

(e);

node.next = pre.next;

pre.next = node;

size++;}

//末尾新增元素

public

void

addlast

(e e)

@override

public string tostring()

return builder.

tostring();}}

對鍊錶的改善,增加虛擬頭節點
//儲存鍊錶的頭節點

private node dummyhead;

public

linklist()

注意此時對tostring的迴圈中需要換成temp.next。此時不需要對頭節點進行額外處理了,addfrist還可以復用add方法。

返回鍊錶中指定索引的元素

//返回鍊錶的指定索引的元素

public e get

(int index)

node cur = dummyhead.next;

for(

int i =

0; i < index; i++

)return cur.e;

}

查詢某個元素

//查詢某個元素是否存在

public

boolean

contain

(e e)

}return

false

;}

刪除指定索引元素

//刪除指定索引

public e delete

(int index)

node pre = dummyhead.next;

for(

int i =

0; i < index; i++

) node deletenode = pre.next;

pre.next = deletenode.next;

deletenode.next = null;

return deletenode.e;

size--

;}

鍊錶對頭的操作是o(1),其他操作都是o(n)用鍊錶實現棧和佇列

思路和陣列差不多,實現棧的話,在頭部增加和取出,實現棧。佇列的話可以使用在隊首進行出列,隊尾進行入列,head,tail。 因為在隊首刪除元素比較容易,在隊尾進行刪除不容易。

鍊錶的入隊和出隊

@override

public e dequeue()

入隊 @override

public

void

enqueue

(e e)

else

size ++

;}

鍊錶的天然遞迴結構特性

鍊錶可以堪稱該節點和其他節點的遞迴。

leetcode中的乙個演算法題

刪除鍊錶中等於給定值 val 的所有節點。

示例:輸入: 1->2->6->3->4->5->6, val = 6

輸出: 1->2->3->4->5

/**

* definition for singly-linked list.

* public class listnode

* }*/class

solution

head.next =

removeelements

(head.next,val);if

(head.val == val)

else

}}

優點就是簡潔,但是占用的記憶體較大。

資料結構 表之煉表

頭插法建立 尾插法建立 顯示 銷毀 include include using namespace std typedef int elemtype typedef struct lnode linklist void createlinklistf linklist l,elemtype a,in...

資料結構之鍊錶

頭結點 第乙個有效結點之前的那個結點 頭結點並不存有效資料 加頭結點的目的主要是為了方便對鍊錶的操作 頭指標 指向頭結點的指標變數 尾指標 指向尾節點的指標變數 如果希望通過乙個函式對鍊錶進行處理,只需要乙個引數 頭指標 首先要定義乙個單鏈表儲存結構 然後建立乙個空表,即初始化,我寫的這個提前設定好...

資料結構之鍊錶

鍊錶是一種基本的資料結構型別,它由乙個個結點組成。每乙個結點包括乙個資料的儲存和乙個指向下乙個結點的引用。在這個定義中,結點是乙個可能含有任意型別資料的抽象實體,它所包含的指向結點的應用顯示了它在構造鍊錶之中的作用。和遞迴程式一樣,遞迴資料結構的概念一開始也令人費解,但其實它的簡潔性賦予了它巨大的價...