新手,求大侠编个链表
输入两个数列(以某数为结束标志),分别生成递增有序单链表,再合成一个递增有序单链表,输出表中的各个结点,求表的长度值
[解决办法]
- C/C++ code
#include<stdio.h>#include<malloc.h>struct list{ int data; struct list *next; };//插入数据函数list * Input_a(){ int num, a; int b ; b = -1; list *head, *p ,*r; head = NULL; r = NULL; printf("插入数据\n"); printf("输入插入数据的个数:\n"); scanf("%d", &num); for(a = 0; a < num; a++ ) { b = b + 2; p = (list *) malloc(sizeof(list)); if(head == NULL) head = p; else r->next = p; p->data = b; r = p; } if(r != NULL) r->next = NULL; return head; }//插入数据函数list * Input_b(){ int num, a; int b ; b = 0; list *head, *p ,*r; head = NULL; r = NULL; printf("插入数据\n"); printf("输入插入数据的个数:\n"); scanf("%d", &num); for(a = 0; a < num; a++ ) { b = b + 2; p = (list *) malloc(sizeof(list)); if(head == NULL) head = p; else r->next = p; p->data = b; r = p; } if(r != NULL) r->next = NULL; return head; }// 查找当前结点的指针 函数list *Find(list *head){ int a, b; b = 1; list *p; p = head; printf("输入要搜索的数据指针位置:\n"); scanf("%d", &a); while(p->next != NULL && b <= a) { if(a == b) { printf("找到了当前结点的指针! \n"); break; } else { p = p->next; b++; } } printf("当前结点的数据是:%d \n", p->data); return p;} //输出函数list * Output(list *tail){ printf("链表中的值是:\n"); while(tail != NULL) { printf("%d \n",tail->data); tail = tail->next; } return 0; }/* // 增序链表void main(){list *p, *q, *r,*head;p = Input_a();q = Input_b();Output(p);Output(q);head = p; while(p != NULL && q != NULL) { if(p->data < q->data) { r = p; p = p->next; r->next = q; } else { r = q; q = q->next; r->next = p; } } //free(r); Output(head);}// 主要算法 用一个指针变量 记录 上一个最小值 另一个变量 记录当前最小值 void main(){ list *p, *q, *r,*j; // r表示上一个最小值 j表示当前最小值 p = Input_a(); q = Input_b(); Output(p); Output(q); r = (list *) malloc(sizeof(list)); r = NULL; while(p != NULL && q != NULL) { if(p->data < q->data) { j = p; p = p->next; } else { j = q; q = q->next; } j->next = r; r = j; } /* q->next = r; Output(q); */ // 逻辑清晰的分析 if else !/* if(p != NULL) { while(p != NULL) { j = p; p = p->next; j->next = r; // r 指向上一个最小值 r = j; } } else if(q != NULL) { while(q != NULL) { j = q; q = q->next; j->next = r; r = j; } } Output(j); }void main(){ list *p , *q, *r,*head; int ch; q = (list *) malloc(sizeof(list)); p = Input_a(); head = p; Output(p); printf("输入要插入的值:\n"); scanf("%d", &ch); q->data = ch; // printf("33"); while(ch > p->data) { r = p; p = p->next; } q->next = r->next; r->next = q; Output(head); }*/struct lists{ char data; struct lists *next;};// 带头结点的单链表lists *Inputs(){ lists *head, *p, *r; char ch; int num; num = 0; head = (lists *) malloc(sizeof(lists)); r = head; printf("输入数据“#”结束:\n"); ch = getchar(); while(ch != '#') { num++; p = (lists *) malloc(sizeof(lists)); p->data = ch; r->next = p; r = p; // 下一次使用r->next ch = getchar(); //从输入流中读取一个 字符 } head->data = num; r->next = NULL; return head;}void Outputs(lists *tail){ printf("链表中的值是:\n"); while(tail != NULL) { printf("%c \n",tail->data); tail = tail->next; }}void Len(lists *head){ printf("链表中共有%d个值\n",head->data);}void main(){ lists *m; m = Inputs(); Outputs(m); Len(m);}
[解决办法]