力扣刷题---合并链表----结构体链表的使用

在这里插入图片描述左边为题目,右边为答案。

拓展结构体链表的使用结果显示:
用户创建链表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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值