这么写为什么不对啊 有希望改嘛 错在哪里了 初学者自学的 别提醒我30个字了
#include <bits/stdc++.h>
using namespace std;
typedef int ElemType;
typedef struct Link {
ElemType Elem;
struct Link *next;
} link;
link *CreatLink(int n) {
link *head = (link *)malloc(sizeof(link));
head->next = NULL;
//创立头节点
link *temp = head;
//创立头指针指向头节点
while (n--) {
link *a = (link *)malloc(sizeof(link));
scanf("%d", &a->Elem);
a->next = NULL;
temp->next = a;
temp = a;
}
return head;
}
link *merge(link *l1, link *l2) {
if (l1 == NULL)
return l2;
if (l2 == NULL)
return l1;
l1 = l1->next;
l2 = l2->next;
link *head = (link *)malloc(sizeof(link));
head->next = NULL;
//新头节点
link *tail = head;
//新头指针
while (l1 && l2) {
if (l1->Elem <= l2->Elem) {
tail->next = l1;
l1 = l1->next;
} else {
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
//循环操作
if (l1)
tail->next = l1;
if (l2)
tail->next = l2;
//最后必有一个原链表还剩下一串链表
return head;
}
int main() {
link *l1, *l2, *l3;
int n1, n2;
cout << "输入A链表表长及元素\n";
scanf("%d", &n1);
l1 = CreatLink(n1);
cout << "输入B链表表长及元素\n";
scanf("%d", &n2);
l2 = CreatLink(n2);
l3 = merge(l1, l2);
cout << "合并后的C表为:\n";
link *p = l3->next;
while (p) {
printf("%d ", p->Elem);
p = p->next;
}
return 0;
}
运行结果:
代码如下,供参考:
#include<iostream>
using namespace std;
typedef int ElemType;
typedef struct Link {
ElemType Elem;
struct Link* next;
}link;
link* CreatLink(link* head, int n) {
int i = 1;
link* p = head;
while (i <= n)
{
link* s = (link*)malloc(sizeof(link));
scanf("%d", &s->Elem);
s->next = NULL;
p->next = s;
p = p->next;
i++;
}
return head->next;
}
link* merge(link* l1, link* l2) {
link* head, *p, *s;
head = (link*)malloc(sizeof(link));
p = head;
while (l1 != NULL || l2 != NULL)
{
s = (link*)malloc(sizeof(link));
if (l1 != NULL && l1->Elem <= l2->Elem)
{
s->Elem = l1->Elem;
l1 = l1->next;
}
else
{
s->Elem = l2->Elem;
l2 = l2->next;
}
s->next = NULL;
p->next = s;
p = p->next;
}
return head->next;
}
int main()
{
link* l1, * l2, * l3;
int n1, n2;
cout << "输入A链表表长及元素\n";
scanf("%d", &n1);
l1 = (link*)malloc(sizeof(link));
l1 = CreatLink(l1, n1);
cout << "输入B链表表长及元素\n";
scanf("%d", &n2);
l2 = (link*)malloc(sizeof(link));
l2 = CreatLink(l2, n2);
l3 = merge(l1, l2);
cout << "合并后的C表为:" << endl;
int n = n1 + n2;
while (n--)
{
printf("%d ", l3->Elem);
l3 = l3->next;
}
return 0;
}
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node* next;
}Node_t;
//开辟节点并初始化
Node_t* AollcNode(int x)
{
Node_t* p = (Node_t*)malloc(sizeof(Node_t));//新建一个节点
//初始化
p->data = x;
p->next = NULL;
return p;
}
//合并
void MergeList(Node_t* head, Node_t* head1, Node_t* head2)
{
Node_t* p = head;
Node_t* p1 = head1->next;//指向第一个节点
Node_t* p2 = head2->next;//指向第一个节点
while (p1 && p2)
{
if (p1->data <= p2->data)
{
p->next = p1;
p1 = p1->next;
}
else
{
p->next = p2;
p2 = p2->next;
}
p = p->next;//指向新的节点,起到连接下一个节点的左右
}
//链表2还有数据
if (p1 == NULL)
{
p->next = p2;
}
//链表1还有数据
if (p2 == NULL)
{
p->next = p1;
}
}
//尾插入创建链表
void InintList(Node_t** end)
{
int i = 0;
int x = 0;
Node_t* p = NULL;
printf("输入链表长度:>");
int n = 0;
scanf("%d", &n);
for (; i < n; i++)
{
scanf("%d", &x);
p = AollcNode(x);
(*end)->next = p;
*end = p;
}
}
void ShowNode(Node_t* head)
{
Node_t* p = head->next;
while (p)
{
printf("%d->", p->data);
p = p->next;
}
printf("NULL\n");
}
int main()
{
Node_t* head1 = AollcNode(0);
Node_t* head2 = AollcNode(0);
Node_t* head3 = AollcNode(0);//合并后的tou
printf("初始化链表1\n");
Node_t* end1 = head1;
//因为要记录结尾,要改变尾指针的指向要传址调用
InintList( &end1);
ShowNode(head1);
printf("初始化链表2\n");
Node_t* end2 = head2;
//因为要记录结尾,要改变尾指针的指向要传址调用
InintList(&end2);
ShowNode(head2);
printf("合并后:>");
MergeList(head3, head1, head2);
ShowNode(head3);
free(head1);
free(head2);
free(head3);
head1 = NULL;
head2 = NULL;
head3 = NULL;
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct Link{
ElemType Elem;
struct Link *next;
}link;
link * CreatLink (int n) {
link *head = (link *)malloc(sizeof(link));
head->next = NULL;
//创立头节点
link *temp = head;
//创立头指针指向头节点
while(n--)
{
link *a = (link *)malloc(sizeof(link));
scanf("%d",&a->Elem);
a->next = NULL;
temp->next = a;
temp = temp->next;
}
return head;
}
link * merge (link *l1, link *l2) {
if (l1 == NULL) return l2;
if (l2 == NULL) return l1;
link *head = (link *)malloc(sizeof(link));
head->next = NULL;
//新头节点
link *tail = head;
//新头指针
while(l1 && l2)
{
if (l1->Elem <= l2->Elem)
{
tail->next = l1;
l1 = l1->next;
}
else
{
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
//循环操作
if(l1) tail->next = l1;
if(l2) tail->next = l2;
//最后必有一个原链表还剩下一串链表
return head->next;
}
int main ()
{
link *l1,*l2,*l3;
int n1,n2;
cout << "输入A链表表长及元素\n";
scanf("%d",&n1);
l1 = CreatLink (n1);
cout << "输入B链表表长及元素\n";
scanf("%d",&n2);
l2 = CreatLink (n2);
l3 = merge(l1->next,l2->next);
cout << "合并后的C表为:\n";
while(l3)
{
printf("%d ",l3->Elem);
l3 = l3->next;
}
return 0;
}
代码呢?
#include <bits/stdc++.h>
using namespace std;
typedef int ElemType;
typedef struct Link{
ElemType Elem;
struct Link *next;
}link;
link * CreatLink (int n) {
link *head = (link *)malloc(sizeof(link));
head->next = NULL;
//创立头节点
link *temp = head;
//创立头指针指向头节点
while(n- -)
{
link *a = (link *)malloc(sizeof(link));
scanf("%d",&a->Elem);
a->next = NULL;
temp->next = a;
temp = temp->next;
}
return head;
}
link * merge (link *l1, link *l2) {
if (l1 == NULL) return l2;
if (l2 == NULL) return l1;
link *head = (link *)malloc(sizeof(link));
head->next = NULL;
//新头节点
link *tail = head;
//新头指针
while(l1 && l2)
{
if (l1->Elem <= l2->Elem)
{
tail->next = l1;
l1 = l1->next;
}
else
{
tail->next = l2;
l2 = l2->next;
}
tail = tail->next;
}
//循环操作
if(l1) tail->next = l1;
if(l2) tail->next = l2;
//最后必有一个原链表还剩下一串链表
return head->next;
}
int main ()
{
link *l1,*l2,*l3;
int n1,n2;
cout << "输入A链表表长及元素\n";
scanf("%d",&n1);
l1 = CreatLink (n1);
cout << "输入B链表表长及元素\n";
scanf("%d",&n2);
l2 = CreatLink (n2);
l3 = merge(l1,l2);
cout << “合并后的C表为:\n”;
while((n1+n2) - -)
{
printf("%d ",l3->Elem);
l3 = l3->next;
}
return 0;
}