將單鏈表拆分為兩個特定的單鏈表

2021-07-23 00:21:34 字數 976 閱讀 8509

題目要求:有乙個帶頭結點的單鏈表l=,設計乙個演算法將其拆分成

兩個帶頭結點的單鏈表l1和l2,其中l1=,l2=。

思路:l1用尾插法構建,l2用頭插法構建。

#includeusing namespace std;

typedef char elemtype;

//定義單鏈表結構體

struct linklist

;//頭插法建立單鏈表

void createlistf(linklist* &l, elemtype a, const int n)

}//尾插法建立單鏈表

void createlistr(linklist* &l, elemtype a, const int n)

}//輸出單鏈表

void displaylist(linklist* l)

cout << endl;

}void main()

; createlistr(l, a, n);//構建原始單鏈表

cout << "原始";

displaylist(l);

//掃瞄原始單鏈表,得到用於構建l1,l2的陣列

elemtype a1[n / 2], a2[n / 2];

linklist* p = l->next;

int k = 0;

while (p != null)

else

++k;

p = p->next;

} //構建l1,l2

createlistr(l1, a1, n / 2);

createlistf(l2, a2, n / 2);

//輸出拆分後的單鏈表l1,l2

cout << "l1";

displaylist(l1);

cout << "l2";

displaylist(l2);

}

將單鏈表L拆分成兩個帶頭結點的單鏈表L1和L2

有乙個帶頭結點的單鏈表l 設計乙個演算法將其拆分成兩個帶頭結點的單鏈表l1和l2,其中l1 l2 要求l1使用l的頭結點。利用原單鏈表l中的所有結點通過改變指標域重組成兩個單鏈表l1,l2.其中l1的相對順序與l相同,所以採用頭插法建立單鏈表l1.l2的相對順序與l相反,所以採用尾插法。includ...

將兩個單鏈表合併成乙個有序單鏈表

3.10 4.將兩個單鏈表合併成乙個有序單鏈表 由於以前初學c 時所寫的 不堪入目,不符合規範性,完整性和魯棒性,於是今日重寫其核心演算法以警示自己。node merge node p1head,node p2head else return pmergedhead 思路 因為鍊錶可以由結點輕鬆構造...

單鏈表操作之合併兩個單鏈表

本篇部落格為合併兩個單鏈表,有序和無序都可以 其中用到單鏈表的尾插和單鏈表的選擇排序 中大部分操作都在單鏈表基本操作詳解中介紹過,這裡就直接上 include include includetypedef int datatype typedef struct linknode linknode,p...