鍊錶賦值和鍊錶拆分

2021-10-05 20:38:28 字數 3484 閱讀 9901

今天我們老師下發了這道題目:

設計演算法將乙個帶頭結點的單鏈表a分解為兩個具有相同結構的單鏈表b和c,其中b表的結點為a表中值小於零的結點,而c表的結點為a表中值大於零的結點。

我想都沒想這還不簡單,於是,我寫下如下**:

main:

int

main()

; tail_head=

createlisttail

(d,4);

tail_head1=

createlisttail

(d,2);

tail_head2=

createlisttail

(d,2);

printf

("單鏈表是:\n");

printlist_list

(tail_head)

;classify

(tail_head,tail_head1,tail_head2)

;printf

("\n大於0的數為:");

printlist_list

(tail_head1)

;printf

("\n小於0的數為:");

printlist_list

(tail_head2)

;printf

("\n");

}

void

classify

(linklist head,linklist head1,linklist head2)

else

}}

結果:

我很高興的提交了作業,不料老師叫我重新看一遍題目,我心想,沒問題啊,該實現的都實現了。重新看了一遍題目,發現不對,題目要求是拆分,而我寫的是賦值。

於是乎我修改了我的**:

int

main()

; tail_head=

createlisttail

(d,4);

tail_head1=

initlist_list()

; tail_head2=

initlist_list()

;printf

("單鏈表是:\n");

printlist_list

(tail_head)

;classify

(tail_head,tail_head1,tail_head2)

;printf

("\n大於0的數為:");

printlist_list

(tail_head1)

;printf

("\n小於0的數為:");

printlist_list

(tail_head2)

;printf

("\n");

}

void

classify

(linklist &head,linklist &head1,linklist &head2)

else

if(p-

>data<0)

}}

這兩個**雖然結果一致但是意義大不相同;第乙個我主要靠

p1=p1-

>next;

p1->data=p-

>data;

printf

("%d"

,p1-

>data)

;

不仔細看沒有問題,但是這是賦值,只能在字串給定長度時賦值

而第二個**用

p1-

>next=p;

p=p-

>next;

p1=p1-

>next;

p1->next=

null

;

這是標準的拆分建鏈,雖然結果一致,但是實現過程不一樣,希望看過的讀者在學習和工作中不要和博主犯同樣的錯誤了。

附上全部**:

#include

#include

#include

#include

typedef

int status;

typedef

int elemtype;

typedef

struct nodenode;

typedef

struct node * linklist;

linklist initlist_list

(void);

//初始化

linklist createlisttail

(elemtype a,

int n)

;//建表

void

printlist_list

(linklist head)

;//輸出

void

classify

(linklist &head,linklist &head1,linklist &head2)

;//分類並建表輸出

intmain()

; tail_head=

createlisttail

(d,4);

tail_head1=

initlist_list()

; tail_head2=

initlist_list()

;printf

("單鏈表是:\n");

printlist_list

(tail_head)

;classify

(tail_head,tail_head1,tail_head2)

;printf

("\n大於0的數為:");

printlist_list

(tail_head1)

;printf

("\n小於0的數為:");

printlist_list

(tail_head2)

;printf

("\n");

}linklist initlist_list

(void

)linklist createlisttail

(elemtype a,

int n)

p->next=

null

;return head;

}void

printlist_list

(linklist head)

}void

classify

(linklist &head,linklist &head1,linklist &head2)

else

if(p-

>data<0)

}}

下面定然有帥哥美女點讚!

鍊錶拆分為奇偶表

題目 將乙個帶頭結點單鏈表a分解成兩個帶頭結點的單鏈表a和b,使得a中含有原表中序號為奇數的元素,b中為偶數,且保持其相對位置不變 分析 首先我們需要分配乙個節點空間為b作為頭節點,然後設定乙個flag,為0時認為是奇數,鏈給a,為1時認為是 偶數,連給b,採用尾插法 如下 struct link ...

拆分單迴圈鍊錶

設單迴圈鍊錶l1,對其遍歷的結果是x1,x2,xn。將該迴圈鍊錶拆分成兩個單迴圈鍊錶l1和l2,使得l1中含有原l1表中序號為奇數的節點,l2中含有原l1表中序號為偶數的節點 include includeusing namespace std template struct node templa...

複雜鍊錶的賦值

輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標random指向乙個隨機節點 請對此鍊錶進行深拷貝,並返回拷貝後的頭結點。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 建立乙個列表l1,將鍊錶的每乙個節點按順序加到列表l1裡面。建立乙個字...