今天我們老師下發了這道題目:
設計演算法將乙個帶頭結點的單鏈表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裡面。建立乙個字...