遞迴實現有序鍊錶(不需要使用兩個指標)

2021-06-29 11:01:28 字數 869 閱讀 7490

在使用有序鍊錶作為基本資料結構時,當插入資料時,為了保持鍊錶的有序性,我們需要兩個指標來定位插入位置。通過遞迴我們可以巧妙的實現不要兩個指標的做法。

//#include "stdafx.h"

/*在單鏈表中有序插入元素時,一般使用兩個指標,乙個掃瞄指標,乙個指向掃瞄指標前一項的指標,

需要通過前一項指標來訪問插入位置

《程式設計珠璣》給出了乙個通過遞迴的方法不使用兩個指標的實現方法,**如下

(通過實現乙個集合的介面來體現,集合的底層實現是有序鍊錶)

*/#includeusing namespace std;

class myset

}; node* head;

node* sentinel;

int elemcount;

int maxelem;

int n;

node* rinsert(node* p, int t)

else if (p->val>t)

return p;

}public:

myset(int elemcount, int maxelem) :elemcount(elemcount), maxelem(maxelem + 1), n(0)

void insert(int x)

else

}int size()

void report(int* res) }

};int _tmain(int argc, _tchar* argv)

; int n = sizeof(a) / sizeof(a[0]);

myset mset(n, 9);

int *res = new int[n];

for (int i = 0; i

遞迴合併兩個有序鍊錶

遞迴 程式呼叫自身的程式設計技巧稱為遞迴。一般來說,遞迴需要有邊界條件 遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進 當邊界條件滿足時,遞迴返回。遞迴終止條件 遞迴的終止條件一般定義在遞迴函式內部,在遞迴呼叫前要做乙個條件判斷,根據判斷的結果選擇是繼續呼叫自身,還是return 返回終止遞迴...

C 實現 將兩個有序鍊錶並為乙個有序鍊錶

using system using system.collections.generic using system.text static void mergelist linkedlistls1,linkedlistls2,ref linkedlistls3 else ls3.addfirst ...

合併兩個有序鍊錶的golang實現

將兩個有序鍊錶合併為乙個新的有序鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 注意 如果有一條鏈是nil,直接返回另外一條鏈 if l1 nil if l2 nil 然後我們就要比較兩個鍊錶的節點的順序了 先來看一張圖 核心 ...