中午打电话 2023-03-16 18:36 采纳率: 100%
浏览 48
已结题

如何做好单链表的分割

单链表的分割
将一个单链表以某个元素基准分割为两个链表
提示:
1输入若干数值创建一一个单链表(-1表示结束)
2输出该初始单链表
3输入一一个基准值X
4分割为两个单链表(一个单链表的元素值均小于基准,另一个单链表的元素值均大于等于基准)
5输出分割后的两个链表

  • 写回答

4条回答 默认 最新

  • qzjhjxj 2023-03-16 22:09
    关注

    供参考:

    #include <stdio.h>
    #include <malloc.h>
    typedef int ElemType;
    typedef struct LNode{
        ElemType data;
        struct LNode *next;
    }LinkNode;
    
    void InitList(LinkNode **L)
    {
        (*L) = (LinkNode *)malloc(sizeof(LinkNode));
        (*L)->next = NULL;
    }
    
    void CreateList(LinkNode *L)
    {
        LinkNode *p = L,*pt = NULL;
        ElemType x;
        printf("输入若干数值创建一个单链表(-1表示结束):");
        while(1){
            scanf("%d", &x);
            if (x == -1)  break;
            pt = (LinkNode *)malloc(sizeof(LinkNode));
            pt->next = NULL;
            pt->data = x;
            p->next = pt;
            p = pt;
        }
    }
    
    void DispList(LinkNode *L)
    {
        LinkNode *p = L->next;
        while(p != NULL)
        {
            printf("%d ",p->data);
            p = p->next;
        }
        printf("\n");
    }
    
    void Split1(LinkNode *L1, LinkNode *L2)
    {
        ElemType x;
        LinkNode *pL1 = L1,*pnL1 = L1->next,*pL2 = L2,*pL = NULL;
        printf("输入一个基准值x:");
        scanf("%d", &x);
        while(pnL1 != NULL){
            pL = pnL1;
            pnL1 = pnL1->next;
            pL->next = NULL;
            if(pL->data < x){
                pL1->next = pL; //链表 L1 ,元素值 < 基准值
                pL1 = pL;
            }
            else{
                pL2->next = pL; //链表 L2 ,元素值 >= 基准值
                pL2 = pL;
            }
        }
    }
    int main()
    {
        LinkNode *L1,*L2;
        InitList(&L1);
        InitList(&L2);
    
        CreateList(L1);
        DispList(L1);
    
        Split1(L1, L2);
        DispList(L1);
        DispList(L2);
    
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 修改了问题 3月16日
  • 创建了问题 3月16日

悬赏问题

  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 MATLAB中streamslice问题
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序