• 2-4 递增链表的插入


    题目链接:https://pintia.cn/problem-sets/434/problems/5726

    1.如果题目没有给我们建好原递增序列的链表,那么我们可以考虑在创建原链表时插入需要插入的结点,就是在创建原链表时,每读入一个数据,将该数据与待插入的数据相比较,如果发现待插入数据小于等于刚读入的数据,那么就先把需要插入的数据生成的结点链接到表尾,再把刚读入的数据结点链接到表尾,然后继续链表的创建,但是为了防止需要插入数据的反复插入,我们需要设置一个标志flag = 0; 插入完成后就将这个flag置为1,这样就不会反复插入了。

    下面是这个想法的实现代码:

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 
     4 typedef int ElementType;
     5 typedef struct Node* List;
     6 struct Node{
     7     ElementType Data;
     8     List Next;
     9 };
    10 
    11 int main()
    12 {
    13     int N, M, dt, flag;
    14     flag = 0;
    15     List front, rear, tmp;
    16     front = rear = (List)malloc(sizeof(struct Node));
    17 
    18     scanf_s("%d %d", &N, &M);
    19     getchar();
    20 
    21     if (N == 0)                //如果原链表为空,直接插入
    22     {
    23         tmp = (List)malloc(sizeof(struct Node));
    24         tmp->Data = M;
    25         tmp->Next = NULL;
    26         rear->Next = tmp;
    27         rear = tmp;
    28     }
    29 
    30     while (N--)            //如果原链表不为空,在建表时插入
    31     {
    32         scanf_s("%d", &dt);
    33         getchar();
    34         if (M <= dt && flag == 0)
    35         {
    36             flag = 1;
    37             tmp = (List)malloc(sizeof(struct Node));
    38             tmp->Data = M;
    39             tmp->Next = NULL;
    40             rear->Next = tmp;
    41             rear = tmp;
    42         }
    43         tmp = (List)malloc(sizeof(struct Node));
    44         tmp ->Data = dt;
    45         tmp -> Next = NULL;
    46         rear -> Next = tmp;
    47         rear = tmp;
    48     }
    49     tmp = front -> Next;
    50     for (;tmp->Next; tmp = tmp->Next)
    51         printf("%d ", tmp->Data);
    52     printf("%d
    ", tmp->Data);
    53     
    54 
    55     return 0;
    56 }

    2.下面是这题的常规解法:

     1 List Insert(List L, ElementType X)
     2 {
     3     List PreNode, InsNode;
     4     PreNode = L;
     5     for (; PreNode->Next && PreNode->Next->Data < X; PreNode = PreNode->Next);
     6     InsNode = (List)malloc(sizeof(struct Node));
     7     InsNode->Data = X;
     8     InsNode->Next = PreNode->Next;
     9     PreNode->Next = InsNode;
    10     return L;
    11 }
  • 相关阅读:
    JavaScript underscore
    JavaScript jQuery 事件、动画、扩展
    JavaScript jQuery 入门回顾
    JavaScript H5 Canvas
    JavaScript Ajax + Promise
    JavaScript 浏览器对象
    JavaScript 面向对象编程
    JavaScript 标准对象
    JavaScript 高阶函数 + generator生成器
    “耐撕”团队2016.04.12站立会议
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/9750324.html
Copyright © 2020-2023  润新知