單鏈表的簡單實現

2021-10-05 06:01:11 字數 2711 閱讀 4415

鍊錶是一種資料結構,不同與集合,鍊錶新增、刪除容易,查詢慢。因為鍊錶新增時增加和節點的連線就行,刪除時斷開和節點的連線也就可以了。

剛手寫了乙個單鏈表的簡單實現**,將自己的感悟寫出來。

單鏈表的資料結構比較簡單,包含有乙個node節點,節點**如下。

class

node

}

因為單鏈表只指向下乙個節點,所以只有next。雙鏈表執行前後節點,所以有pre和next兩項。因為每乙個節點都是資料,所以是node型別。在呼叫單鏈表的構造方法的時候,會自動指向下乙個節點next。

在單鏈表預設定義了乙個list節點和乙個size變數,**如下:

node list;

int size;

// 表示有多少個節點

list節點表示鍊錶的頭節點,也就是head節點,size表示鍊錶的大小。

接下來列舉一下單鏈表的增刪改查方法,首先說一下新增資料的方法,put方法,**如下:

// 新增節點

// 在鍊錶頭部新增節點

public

void

put(t data)

該方法時往鍊錶頭部新增節點的方法。**解讀:將list節點賦值給head節點,表示頭節點,用node的構造方法,new乙個node,將傳入的list指代data的下乙個節點,將new出來的節點指向頭節點,這樣就完成了頭部新增節點的操作。

在指定位置新增節點,需要傳入乙個index表示插入的位置,乙個data,表示插入的節點資料。需要對出傳入的index做判斷,避免超出鍊錶的大小或是值小於0。如果超出範圍,判讀那越界,判斷的**如下:

public

void

checkpositionindex

(int index)

}

在指定位置新增節點的**操作如下:

// 指定位置新增節點

public

void

put(

int index, t data)

node node =

newnode

(data, curnode)

; head.next = node;

size++

;}

**解讀:首先對插入節點的位置做判斷,判斷當前節點是否合法,有沒有越界。然後定義乙個head節點和乙個當前節點,當前節點指向頭節點,用輪詢的方式去找到要插入的位置。在輪詢的過程中,把當前節點的前乙個節點賦值給head節點,用next方式去找下乙個節點。在輪詢到index時,找到了當前節點的前乙個節點和當前節點,輪詢結束。然後用new的方法,將要插入的資料的next節點指向當前節點,將當前節點的上乙個節點指向new出來的節點。

增加的方法就這兩個,接下來說一下刪除的方法,remove方法,先看**:

// 刪除節點

// 刪除鍊錶頭部節點

public t remove()

return null;

}

**解讀:因為list節點預設指頭部節點,所以先判斷list是否為空。判斷為空,返回null;判斷不為空,繼續執行。將list賦值給node節點,將list的下乙個節點賦值給list節點。呼叫node節點的next方法斷開連線,將node節點孤立,便於gc**。如果不斷開節點,可能node節點會指向其他的節點。然後將size–,返回刪除的node的data。

// 刪除指定位置的節點

public t remove

(int index)

head.next = curnode.next;

curnode.next = null;

// gc

return curnode.data;

}

這個和put方法類似,可以自己理解一下。

// 刪除鍊錶尾部節點

public t removelast()

curnode.next = null;

size--

;return curnode.data;

}return null;

}

**解讀:刪除尾部節點也是採用輪詢的方式,curnode指代要刪除的最後乙個節點的上乙個節點,curnode.next表示最後乙個節點也就是要刪除的節點,head的作用就是用來存curnode值。

通過curnode.next = null;這種用斷開上乙個節點指向下乙個節點鏈結的方式孤立最後乙個節點,使其被gc**,刪除節點。

// 修改節點

public

void

set(

int index, t data)

head.data = data;

}

修改節點的方法不細講,可以參考上面的邏輯思考一番。

// 查詢頭部節點

public t get()

else

}// 查詢指定位置的節點

public t get

(int index)

return node.data;

}

單鏈表簡單實現

單鏈表的形式 頭部有個head節點每個節點都向後關聯乙個節點 下面是我的單鏈表的插刪改查和反轉的操作 include include include typedef struct node list define node size sizeof struct node typedef struct...

單鏈表的簡單實現

include include include define max list length 20 define expand list length 5 using namespace std include include typedef struct node node,list 初始化乙個l...

單鏈表的簡單實現

單鏈表 鍊錶是一種鏈式訪問的資料結構,用一組位址任意的儲存單元存放線性表中的資料元素。鍊錶中的資料是以結點來表示的,每個結點的構成 元素 資料元素的映象 指標 指示後繼元素儲存位置 標頭檔案.結構的定義和 簡單函式實現的宣告 pragma once include include include t...