在使用有序鍊錶作為基本資料結構時,當插入資料時,為了保持鍊錶的有序性,我們需要兩個指標來定位插入位置。通過遞迴我們可以巧妙的實現不要兩個指標的做法。
//#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 然後我們就要比較兩個鍊錶的節點的順序了 先來看一張圖 核心 ...