|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 壳970527 于 2022-12-20 16:21 编辑
- // pae12-2.c
- #include <stdio.h>
- #include <stdlib.h>
- struct node {
- int val;
- struct node *next;
- };
- typedef struct node *LIST;
- LIST divide(LIST x, int p) ;
- LIST merge(LIST x, LIST y) ;
- int list_len(LIST x) {//リストの要素数を求める関数
- if (x == NULL) return 0;
- return 1 + list_len(x->next);
- }
- void list_show(char *m, LIST x) {//リストにある値を表示する関数
- printf("%s:", m);
- while (x != NULL) {
- printf("%d ", x->val);
- x = x->next;
- }
- printf("\n");
- }
- LIST add_top(LIST x, int v) {//リストxの先頭に、値vを繋げたリストを返す関数
- LIST t;
- t = (LIST) malloc(sizeof(struct node));
- if (t == NULL) {
- printf("malloc failed");
- exit(-1);
- }
- t->val = v;
- t->next = x;
- return t;
- }
- int main(void) {
- int i, len;
- LIST list1 = NULL, list2, mix;
- printf("length: ");fflush(stdout);
- scanf("%d", &len);
- for (i = len; i >= 1; i--)
- list1 = add_top(list1, 100+i);
- list2 = divide(list1, list_len(list1) / 2);
- list_show("list1", list1);
- list_show("list2", list2);
- mix = merge(list2, list1);
- list_show("mixed", mix);
- return 0;
- }
- LIST divide(LIST x, int p) {
- return(,p-1)
- }
- LIST merge(LIST x, LIST y) {
- }
复制代码
最下面的2个函数风别是divide和merge,divide的意思是需要把这个函数给断开,也就是让他的next为NULL,断开的下一个结构体为一个新的list2;2个函数需要利用递归,第一个函数返回值要是return(,p-1)这个格式的,再把这两个组合起来,让list2和list1交叉起来,我思考了很久可是不知道从何下手
下面是当函数设计成功后运行程序之后输入数字5或者6出来的结果
length: 5
list1:101 102
list2:103 104 105
mixed:103 101 104 102 105
length: 6
list1:101 102 103
list2:104 105 106
mixed:104 101 105 102 106 103 |
|