首页 > 其他分享 >38-9

38-9

时间:2023-10-06 11:55:05浏览次数:25  
标签:pre 38 LNode next LinkList while NULL

给定一个带头结点的单链表,按递增次序输出单链表中各结点的数据元素,并释放空间。不允许使用辅助数组

使用直接插入排序,将链表递增,然后进行遍历删除操作

时间复杂度为O(N²)

#include <stdio.h>
#include <stdlib.h>

typedef struct node{
    int data;
    struct node *next;
}LNode,*LinkList;

void TailCreate(LinkList &L)
{
    L=(LinkList)malloc(sizeof(LNode));
    L->next=NULL;
    LNode *p,*r=L;
    int x;
    scanf("%d",&x);
    while(x!=999)
    {
        p=(LNode*)malloc(sizeof(LNode));
        p->data=x;
        p->next=NULL;
        r->next=p;
        r=p;
        scanf("%d",&x);
    }
}

void displayList(LinkList L)
{
    LNode *p=L->next;
    while(p!=NULL)
    {
        printf("%d  ",p->data);
        p=p->next;
    }
}

void Delete(LinkList &L)
{
    LNode *pre,*r,*p=L->next;
    r=p->next;
    L->next=NULL;
    while(p)
    {
        r=p->next;
        pre=L;
        while(pre->next!=NULL && pre->next->data<p->data)
            pre=pre->next;
        p->next=pre->next;
        pre->next=p;
        p=r;
    } 
    p=L->next;
    while(p)
    {
        printf("%d ",p->data);
        r=p;
        p=p->next;
        free(r);
    }
    free(L);
} 

int main()
{
    LinkList L;
    TailCreate(L);
    displayList(L);
    printf("\n");
    Delete(L);
    return 0;
}

 

标签:pre,38,LNode,next,LinkList,while,NULL
From: https://www.cnblogs.com/simpleset/p/17744397.html

相关文章

  • 38-8
    给定两个链表,编写算法找出两个链表的公共结点#include<stdio.h>#include<stdlib.h>typedefstructnode{intdata;structnode*next;}LNode,*LinkList;voidTailCreate(LinkList&L){L=(LinkList)malloc(sizeof(LNode));L->next=NULL;LNo......
  • 38-6
    有一个带头结点的单链表L,设计一个算法使其元素递增有序#include<stdio.h>#include<stdlib.h>typedefstructnode{intdata;structnode*next;}LNode,*LinkList;voidTailCreate(LinkList&L){L=(LinkList)malloc(sizeof(LNode));L->next=NULL;......
  • P5385 [Cnoi2019] 须臾幻境
    (无需LCT简化版:P4764)主要是记录一个Trick而非LCT、主席树等的使用。给定无向图,\(q\)次询问,求边权在\([l,r]\)内的边的生成子图的连通块数目。强制在线。对于连通块问题,考虑提取生成森林。连通块数目等于顶点数减去边数最多的生成森林的边数。强制在线也可以先用离线......
  • 38-5
    编写带头结点的算法,就地逆置小心断链#include<stdio.h>#include<stdlib.h>typedefstructnode{intdata;structnode*next;}LNode,*LinkList;voidTailCreate(LinkList&L){L=(LinkList)malloc(sizeof(LNode));L->next=NULL;LNode......
  • 38-4
    编写在带头结点的单链表L中删除最小值结点的高效算法,最小值结点唯一先在while中找到最小值结点,再释放空间#include<stdio.h>#include<stdlib.h>typedefstructnode{intdata;structnode*next;}LNode,*LinkList;voidTailCreate(LinkList&L){L=(Lin......
  • 38-3
    设L为带头结点的单链表,编写算法实现从尾到头输出。有两种方法1、递归空间复杂度O(1)2、栈空间复杂度O(N)仅实现了递归算法。#include<stdio.h>#include<stdlib.h>typedefstructnode{intdata;structnode*next;}LNode,*LinkList;voidTailC......
  • 38-2
    在带头结点的单链表L中,删除所有值为x的结点且值为x的结点不唯一,并释放空间#include<stdio.h>#include<stdlib.h>typedefstructnode{intdata;structnode*next;}LNode,*LinkList;voidTailCreate(LinkList&L){L=(LinkList)malloc(sizeof(LNode));......
  • 38-1
    设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点#include<stdio.h>#include<stdlib.h>typedefstructnode{intdata;structnode*next;}LNode,*LinkList;voidCreateList(LinkList&L)//头插法{L=NULL;intx;scanf("%d",&a......
  • 解决警告UserWarning: Glyph 38388 (\N{CJK UNIFIED IDEOGRAPH-95F4}) missing from
    这个警告是由于在绘图时使用了当前字体不支持的字符,通常出现在使用非英文字符(比如中文、日文等)时。为了解决这个问题,你可以尝试以下几种方法:方法一:选择支持中文的字体在绘图之前,指定一个支持中文的字体。例如,可以使用matplotlib.rcParams来指定字体,示例如下:importmatplotlib.pyplo......
  • 算法训练day23 LeetCode669.108.538.
    算法训练day23LeetCode669.108.538.669.修剪二叉搜索树题目669.修剪二叉搜索树-力扣(LeetCode)题解代码随想录(programmercarl.com)递归不能单纯地由根节点的值直接删除单值,需要继续判断子节点是否符合条件classSolution{public:TreeNode*trimBST(T......