左边为题目,右边为答案。
拓展结构体链表的使用结果显示:
用户创建链表1和2(都是正序的),结果返回整合两个链表后有序的链表。
#include <stdio.h>
#include <stdlib.h>
int main()
{
struct ListNode
{
int val;
struct ListNode *next;
};
//创建静态链表
// struct ListNode a,b,c,*p;//我们假设,这样声明的结构体变量a 、b、c在内存中并不是相临的
// a.val=10; b.val=20; c.val=30;
// a.next=&b; b.next=&c; c.next='\0';
// p=&a;
//
// struct ListNode a1,b1,c1,*p1;//我们假设,这样声明的结构体变量a 、b、c在内存中并不是相临的
// a1.val=10; b1.val=40; c1.val=50;
// a1.next=&b1; b1.next=&c1; c1.next='\0';
// p1=&a1;
//创建动态链表
struct ListNode* createList()
{
int c;
struct ListNode *h,*s,*r;
h = (struct ListNode*)malloc(sizeof(struct ListNode));
r=h;
scanf("%d",&c);
while(c!=10)
{
s=(struct ListNode*)malloc(sizeof(struct ListNode));
s->val = c;
r->next = s;
r = s;
scanf("%d",&c);
}
r->next = '\0';
return h;
}
//获取两链表并进行排序
void mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
struct ListNode* dummy = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode* scan = dummy;
struct ListNode* p1 = list1;
struct ListNode* p2 = list2;
// printf("list1->val:%d\n",list1->val);
// printf("list2->val:%d\n",list2->val);
while(1)
{
if(!p1)
{
scan->next = p2;
break;
}
if(!p2)
{
scan->next = p1;
break;
}
if(p1->val>p2->val)
{
scan->next = p2;
p2 = p2->next;
}
if(p1->val<= p2->val)
{
scan->next = p1;
p1 = p1->next;
}
scan = scan->next;
}
dummy=dummy->next;
while(dummy)
{
printf("dummy->val:%d\n",dummy->val);
dummy = dummy->next;
}
}
printf("请输入第一链表中所有的数据:\n");
struct ListNode* p;
p = createList();
p = p->next;
// while(p)
// {
// printf("p->val:%d\n",p->val);
// p = p->next;
// }
printf("请输入第二链表中所有的数据:\n");
struct ListNode* p1;
p1 = createList();
p1=p1->next;
// while(p1)
// {
// printf("p1->val:%d\n",p1->val);
// p1 = p1->next;
// }
mergeTwoLists(p,p1);
return 0;
}