/*
編寫一個算法,將帶頭結點的單向鏈表
拆分成一個奇數鏈表和一個偶數鏈表,并分別輸出
*/
# include <iostream>
# include <stdlib.h>
# include <stdio.h>
using namespace std
;typedef struct Node
{int elem
;struct Node
* next
;
}*linklist
;void inlinklist(linklist
&l
, int n
)
{l
= (linklist
) malloc
(sizeof(Node
));l
->next
= NULL;linklist p
, end
;end
= l
;printf("請輸入鏈表中的元素:\n");for(int i
= 0 ;i
< n
; i
++){p
= (linklist
) malloc
(sizeof(Node
));scanf("%d", &p
->elem
);end
->next
= p
;p
->next
= NULL;end
= p
;}
}void outlinklist(linklist l
)
{printf("鏈表中的元素為:\n");linklist p
;p
= l
->next
;while(p
){printf("%d ", p
->elem
);p
= p
->next
;}printf("\n");
}void splitlinklist
(linklist
&l1
, linklist
&l2
, linklist
&l3
)
{l2
= (linklist
) malloc
(sizeof(Node
));l3
= (linklist
) malloc
(sizeof(Node
));linklist p
, q
, s
;q
= l2
;s
= l3
;p
= l1
->next
;q
->next
= s
->next
= NULL;while(p
){if(p
->elem
% 2 == 1){q
->next
= p
;p
= p
->next
;q
= q
->next
;}else if(p
->elem
%2 == 0){s
->next
= p
;s
= s
->next
;p
= p
->next
;}}q
->next
= NULL;s
->next
= NULL;
}int main()
{linklist l1
, l2
, l3
;int n
;printf("請輸入鏈表的元素值:\n");scanf("%d", &n
);inlinklist(l1
, n
);splitlinklist(l1
, l2
, l3
);outlinklist(l2
);outlinklist(l3
);return 0;
}
總結
以上是生活随笔為你收集整理的数据结构例9.编写一个算法,将带头结点的单向链表 拆分成一个奇数链表和一个偶数链表,并分别输出的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。