赞
踩
(最下边有完整代码及运行截图,中间部分仅提供思路,有残缺)
具体问题如下图所示
简单说一下思路
首先是常规定义一下单链表
- #include <stdio.h>
- #include <stdlib.h>
-
-
- typedef struct Node
- {
- int data;
- struct Node* next;
- }Node;
然后是将输入的数列存入链表中
创建一个head节点,head的指针域设为NULL,并用L指针指向head。
建立一个循环:在循环内接收输入的序列值(假设为) [ 1 2 3 4 5 -1] (用空格隔开),第一次循环,新建一个节点Node,并让L->next(此时L代表head)指向该新建节点Node,形成链表,其中Node数据域data存入1。按此操作依次进行,直到序列值-1
序列值=-1时,L指向的节点的指针域指向NULL,完成单链表
- Node* PutL()
- {
- Node head;
- Node* L= &head;
- head.next = NULL;
- int n;
- while (1)
- {
- scanf("%d", &n);
- if (n != -1)
- {
- L->next = (Node*)malloc(sizeof(Node));
- L->next->data = n;
- L = L->next;
- }
- else
- break;
- }
- L->next = NULL;
- return head.next;
- }
然后就是最重要的合并功能
要合并单链表L1和单链表L2,我们首先定义一个空的链表L3
然后我们考虑如何将L1和L2的值如何放进L3
合并时要有这个思路
1.假设输入两个有序数列
2.再加上对应指针,首先指向对应序列的头一个节点
3.开始比较对应的值,输出较小的那一个(按题目要求
4.N1输出,将N1指向下一位,L3第一个节点data域等于1
接着比较N1,N2
5.N2输出后,将N2指向下一位,L3第二个节点data域等于2
接着比较N1,N2
如此循环下去
若L1与L2长度不等时
易知L2肯定先输出完,即N2最先指向链表尾部,此时N1指向7,则将N1指向的节点包括后面的全部连接到L3即可
完整代码如下:
- #include <stdio.h>
- #include <stdlib.h>
-
-
- typedef struct Node
- {
- int data;
- struct Node* next;
- }Node;
-
- Node* PutL()
- {
- Node head;
- Node* L= &head;
- head.next = NULL;
- int n;
- while (1)
- {
- scanf("%d", &n);
- if (n != -1)
- {
- L->next = (Node*)malloc(sizeof(Node));
- L->next->data = n;
- L = L->next;
- }
- else
- break;
- }
- L->next = NULL;
- return head.next;
- }
-
-
- int main()
- {
- Node* L1 = PutL();
- Node* L2 = PutL();
-
- int f=0;//处理空格
- while (L1&&L2)//两个链表都非空
- {
- if (L1->data > L2->data)//判断首源节点的data的大小
- {
- if (f)
- printf(" ");//当f=0时,进入else;f=1时输出空格
- else
- f = 1;
- printf( "%d",L2->data);
- L2 = L2->next;
- }
- else
- {
- if (f)
- printf(" ");
- else
- f = 1;
- printf("%d",L1->data);
- L1 = L1->next;
- }
- }
- while (L1)//当L1有剩余时
- {
- if (f)
- printf(" ");
- else
- f = 1;
- printf("%d",L1->data);
- L1 = L1->next;
- }
- while (L2)//当L2有剩余时
- {
- if (f)
- printf(" ");
- else
- f = 1;
- printf("%d",L2->data);
- L2 = L2->next;
- }
- if (f == 0)
- printf("NULL");//当f=0时,就证明没有进入任何一个循环,即新链表为空
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。