10.10将A和B合并成一个按元素递减链表
2017-11-24 23:44
127 查看
//10.10 对两个元素递增有序的单链表A和B, //编写算法将A和B合并成一个按元素递减有序(允许有相同值)的单链表C, //要求算法使用A,B中的原有节点,不允许增加新节点。 #include <stdio.h> #include <stdlib.h> typedef struct node { char data; //data为节点的数据信息 struct node *next; //next为指向后继节点的指针 }LNode; //单链表节点类型 LNode *CreateLinkList() //生成单链表 { LNode *head, *p, *q; int i, n; head = (LNode *)malloc(sizeof(LNode)); //生成头节点 head->next = NULL; p = head; q = p; //指针q始终指向链尾节点 printf("Input length of list:\n"); scanf("%d", &n); //读入节点数据 getchar(); printf("Input data of list:\n"); for (i = 1; i <= n; i++) //生成链表的数据节点 { p = (LNode *)malloc(sizeof(LNode)); //申请一个节点空间 scanf("%c", &p->data); getchar(); p->next = NULL; q->next = p; //在链尾插入,把新节点p接在q后面,此时p是最后一个节点 q = p; //让q成为最后的节点(对于下一个数据而言) } return head; //返回指向单链表的头指针head } void Merge(LNode *A, LNode *B, LNode **C) { //将升序链表A,B合并成降序链表*C LNode *p, *q, *s; p = A->next; //p始终指向链表A的第一个未比较的数据节点 q = B->next; //q始终指向链表B的第一个未比较的数据节点 *C = A; //生成链表*C的头节点 (*C)->next = NULL; free(B); //回收链表B的头节点空间 while (p != NULL && q != NULL) //将A,B两链表中当前比较节点中值小者赋值给*s { if (p->data < q->data) { s = p; p = p->next; } else { s = q; q = q->next; } s->next = (*C)->next; //用头插法将结点*s插到链表*C的头结点之后 (*C)->next = s; } if (p == NULL) //如果指向链表A的指针*p为空,则使*p指向链表B { p = q; } while (p != NULL) //将*p所指链表中的剩余结点依次摘下插入的链表C的链首 { s = p; p = p->next; s->next = (*C)->next; (*C)->next = s; } } void print(LNode *p) //输出单链表 { p = p->next; while (p != NULL) { printf("%c ", p->data); p = p->next; } printf("\n"); } int main() { LNode *A, *B, *C; printf("Input data of list A:\n"); A = CreateLinkList(); //生成单链表A printf("Output list A:\n"); print(A); //输出单链表A printf("Input daat of list B:\n"); B = CreateLinkList(); //生成单链表B printf("Output list B:\n"); print(B); //输出单链表B printf("Make list C:\n"); Merge(A, B, &C); //将升序链表A, B合并成降序链表C printf("Output list C:\n"); print(C); //输出单链表C return 0; }
相关文章推荐
- 将两个按元素值递增排序的单链表合并成一个按元素值递减的单链表
- 已知两个链表 la和 lb,其元素值递增排序。编程将la和lb合并成一个递减有序(相同值元素只保留一个)的链表lc。(北方名校经典试题) 本题选做
- 将两个递增的链表合并成一个递减的链表(相同的元素只留下一个),并要求利用原表结点
- 单链表应用举例(单链表A和单链表B的元素都是非递减排列,利用单链表的基本运算,将它们合并成一个单链表C,要求C也是非递减序列)
- 写程序。设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递增有序的单链表。要求使用原链表空间,
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 将一个递增和递减的有序链表,用原空间合并成递增有序的链表-O(n)复杂度
- 随机产生两组整数,每组整数中元素互不相同,这两组数按值递增有序。设计程序,将这两组数合并成按值递减有序的一组数,要求合并的新的一组数中,相同的元素只有一个。
- 删除2个非递增链表相同的元素,并且合并为一个非递增链表
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- 无序链表合并为一个有序链表,且排序后链表中无重复元素
- 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并为一个按元素值递减 有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原装(即A表和
- 将两个非递减的有序链表合并为一个非递增的有序链表
- 将两个非递减的有序链表合并为一个非递增的有序链表
- 将两个递增有序的单链表合并成一个递减有序的单链表,利用原结点空间
- 合并两个单链表(单链表元素均按值非递减排列)
- [LeetCode]Merge Two Sorted Lists & Remove Duplicates from Sorted List 两个有序链表合并为一个&删除链表重复元素