學習隨記六 單鏈表與雙鏈表交換相鄰結點比較

2021-10-20 15:21:03 字數 1239 閱讀 4449

單鏈表結點結構體

typedef

struct listnode1listnode1;

雙鏈表結點結構體

typedef

struct listnode2listnode2;

**##***單鏈表交換相鄰結點

必要操作是需要中間指標儲存指向關係,模擬用temp來交換兩個數

注意要有個頭指標來返回交換後的頭位址

listnode1*

change1

(listnode1*p)

return head;

}

**##**雙鏈表交換相鄰結點

1.鍊錶不能斷

2. 雙鏈表交換相鄰結點比單鏈表複雜,有三種情況

3. 此時待交換的前乙個結點沒有前驅

4. 此時待交換的前乙個結點既有前驅,又有後驅,處於中間位置

5. 此時待交換的後乙個結點沒有後驅

6. 關鍵要點有三:

(1)、不管有沒有前驅和後驅都要進行的操作,有四步

ⅰ——將待交換的前乙個結點的previous指向賦給待交換的後乙個結點的previous

ⅱ——待交換的前乙個結點的previous指標指向待交換的後乙個結點

ⅲ——將待交換的後乙個結點的next指標指向賦給待交換的前乙個結點的next指標

如圖:ⅳ——使待交換的後乙個結點的next指標指向待交換的前乙個結點

(2)、特殊情況之一,沒有前驅時不進行的操作,

使待交換的前乙個結點的previous指標指向的那個結點的next指標指向待交換的後乙個結點

if

(p->previous->previous!=nullptr)

p->previous->previous->next=p->previous;

特殊情況之二,沒有後驅時不進行的操作,

使待交換的後乙個結點的next指標指向的結點的previous指標指向待交換的前乙個結點

if

(p->next!=nullptr)

p->next->previous=p;

完整**:

listnode2*

change2

(listnode2*p)

return head;

}

單鏈表與雙鏈表佇列

一,鍊錶分類 單鏈表與雙向鍊錶 三,定義類 1 node類 傳值與重寫get,set方法 2 linknodelist類 將對資料的增刪差改的基本操作方法或屬性 3 main 主函式類,進行資料的呼叫 四,單鏈表的示例 public class linklistnode else 設定新節點為最後乙...

雙鏈表與單鏈表的比較

雙鏈表在一定程度上就是單鏈表的的基礎上加上了乙個指標域,在一些情況下能夠使程式更加健壯和速率更加高效。雙鏈表的結點定義 typedef struct node int data struct node next struct node prior node 雙鏈表的定義 typedef struct...

單鏈表與有序雙鏈表的實現

單鏈表的實現 描述定義單鏈錶類,建立帶頭結點的單鏈表 節點型別為整型資料 要求包含以下成員函式 頭插法建立單鏈表 利用建構函式實現 尾插法建立單鏈表 過載建構函式實現 鍊錶的遍歷 按值刪除乙個節點 按位置刪除乙個節點 鍊錶的析構 輸入輸入一組資料,以尾插法的形式建立單鏈表 表示輸入結束 構造第乙個鍊...