zoukankan      html  css  js  c++  java
  • PTA实验 链表拼接 (20point(s))

    本题要求实现一个合并两个有序链表的简单函数。链表结点定义如下:

    struct ListNode {
        int data;
        struct ListNode *next;
    };
    

    函数接口定义:

    struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2);
    

    其中list1和list2是用户传入的两个按data升序链接的链表的头指针;函数mergelists将两个链表合并成一个按data升序链接的链表,并返回结果链表的头指针。

    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>
    
    struct ListNode {
        int data;
        struct ListNode *next;
    };
    
    struct ListNode *createlist(); /*裁判实现,细节不表*/
    struct ListNode *mergelists(struct ListNode *list1, struct ListNode *list2);
    void printlist( struct ListNode *head )
    {
         struct ListNode *p = head;
         while (p) {
               printf("%d ", p->data);
               p = p->next;
         }
         printf("
    ");
    }
    
    int main()
    {
        struct ListNode  *list1, *list2;
    
        list1 = createlist();
        list2 = createlist();
        list1 = mergelists(list1, list2);
        printlist(list1);
    
        return 0;
    }
    

    /* 你的代码将被嵌在这里 */

    输入样例:

    1 3 5 7 -1
    2 4 6 -1
    

    输出样例:

    1 2 3 4 5 6 7 
    

    思路:

    本题要求将两个链表合成一个内部元素升序排列的链表,所以先把两个链表合并为一个链表,然后用选择排序法对链表中的元素排序(:若两个链表均为空,则直接返回第一个链表)

    实验代码

    struct ListNode* mergelists(struct ListNode* list1, struct ListNode* list2)
    {
        if (list1 == NULL && list2 == NULL)
        {
            return list1;
        }
        struct ListNode* ptr,*ptr1;
        int x;
        for (ptr = list1; ptr->next != NULL; ptr = ptr->next);
        ptr->next = list2;
        for (ptr = list1; ptr != NULL; ptr = ptr->next)
        {
            for (ptr1 = ptr->next; ptr1 != NULL; ptr1 = ptr1->next)
            {
                if (ptr->data > ptr1->data)
                {
                    x = ptr1->data;
                    ptr1->data = ptr->data;
                    ptr->data = x;
                }
            }
        }
        return list1;
    }
    

    实验结果

  • 相关阅读:
    Linux安装zookeeper以及部署dubbo-admin
    springboot+layui+mybatis-plus的批量删除(批量修改)
    springboot打包jar与war包
    drf-books系列接口作业和分页器
    drf-过滤排序异常处理封装Response对象
    drf-认证权限频率
    drf-路由组件
    视图组件
    请求和响应
    Serializer和ModelSerializer
  • 原文地址:https://www.cnblogs.com/jk-liulei/p/12335420.html
Copyright © 2011-2022 走看看