| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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 |   
 
 
 
 |