順序表之後是鍊錶,鍊錶是線性表的第二種結構。
(單)鍊錶根據《資料結構》這本書 需要會寫初始化、插入、查詢、刪除、取長度的函式。
首先是結構體的定義:
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...