ACM刷題之路(十三)資料結構 鍊錶

2021-08-31 11:25:07 字數 2005 閱讀 6460

順序表之後是鍊錶,鍊錶是線性表的第二種結構。

(單)鍊錶根據《資料結構》這本書 需要會寫初始化、插入、查詢、刪除、取長度的函式。

首先是結構體的定義:

typedef的意思是取別名。把lei這個小名 給int  修改線性表資料型別的時候可以直接改動

typedef int lei;

struct ss

;

第乙個是初始化函式。這裡寫的是有頭指標的鍊錶,所以只需要new乙個頭結點,讓頭結點的next指向null。

ss* chushihua()

第二個是取長度函式。只要讓乙個臨時指標指向頭指標,然後一直遍歷下去就好了,最終返回鍊錶的長度。

int size(ss* l)

return len;

}

第三個是查詢函式,根據書的要求,有兩種查詢函式,其一是根據編號來查詢。

可以讓l指標一直遍歷下去,當l的下乙個節點為空節點或者到達所需要的編號停止。

如果這個時候l不為空切cnt==所需要的序號,就說明該節點存在,返回即可;否則返回空指標表示不存在。

ss* find_num(ss *l,int xuhao)

if(cnt==xuhao && l) return l;

return null;

}

其二是根據值查詢,這個就比較無腦了,一直遍歷下去,直到找到或者找到結尾,如果找到就會返回,沒找到也會自然而然的返回空指標。

ss* find_data(ss* l,lei data)

return l;

}

第四個是插入函式。先查詢這個位置是否可以查,如果存在該位置的前乙個為空的情況,就返回錯誤。

否則new乙個新節點,新的節點的下乙個指向現在n-1的節點的下乙個,讓現在n-1的節點指向新的節點,就這樣轉接完成,返回true。

bool charu(ss* l,lei data,int weizhi)

if(b==null||cnt!=weizhi - 1)

第五個是刪除函式。

先找到需要刪除節點的前乙個位置,如果發現要刪除的節點不存在,則返回false。

如果存在,讓刪除節點的前乙個節點的next指向需要刪除節點的next,然後把需要刪除的節點釋放掉就可以了。

bool shanchu(ss *l,int weizhi)

if(b==null ||b->next == null|| cnt!=weizhi - 1)

接下來是全部**:

#include#include#includeusing namespace std;

typedef int lei;

struct ss

;ss* chushihua()

int size(ss* l)

return len;

}ss* find_num(ss *l,int xuhao)

if(cnt==xuhao && l) return l;

return null;

}ss* find_data(ss* l,lei data)

return l;

}bool charu(ss* l,lei data,int weizhi)

if(b==null||cnt!=weizhi - 1)

bool shanchu(ss *l,int weizhi)

if(b==null ||b->next == null|| cnt!=weizhi - 1)

int main()

leetcode刷題 資料結構(1) 鍊錶

鍊錶 1.找出兩個鍊錶的交點 第一次可做出,解法可優化 2.鍊錶反轉 遞迴 迭代 兩種方法 3.歸併兩個有序的鍊錶 可做出經典題型,兩種方法需掌握 4.從有序鍊錶中刪除重複節點 第一次可做出ok 5.刪除鍊錶的倒數第 n 個節點 第一次可做出ok 6.交換鍊錶中的相鄰結點 思考後可做出 解法可簡化 ...

資料結構鍊錶刷題思路總結

最近刷了一些關於鍊錶的題目,所以也在此進行一下總結鍊錶資料結構中主要會用到的一些方法。在鍊錶的題目中,經常會用到頭插法,具體的做法就是新建乙個指標指向一塊空白的記憶體,然後將原指標指向的鍊錶,乙個個插入到我們新建的指標後面。listnode newhead newlistnode while l1 ...

LeetCode刷題之路 鍊錶(2)

83.刪除排序鍊錶中的重複元素 簡單 說明 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。示例 輸入 1 1 2 3 3 輸出 1 2 3 解答 解法一 迭代法,需考慮到連續多個 三個及三個以上節點相等的情況 class solution else pre.next null ret...