zoukankan      html  css  js  c++  java
  • 数据结构C语言实现----向链表中插入结点

    1.明确在第几个结点后插入

    2.找到插入位置的前一个结点

    3.交换指针:设插入位置的前一个结点为结点A , 插入的结点为结点B , 插入结点后面的一个节点为结点C

          (1)结点B指向结点C

          (2)结点A指向结点B

    代码如下:

    #include<stdio.h>
    #include<stdlib.h>
    
    typedef struct Node
    {
        char date;
        struct Node *next;
    }Node , *LinkList;
    ////////////////////////////////
    //创建一个链表
    LinkList creatlinklist(int n)
    {
        LinkList New_node , Tail_node;
        LinkList Head_node=NULL; 
        char c;
        for (size_t i = 0; i < n; i++)
        {
            printf("第%d个结点的数据为:",i+1);
            scanf("%c",&c);
            fflush(stdin);
            New_node = (LinkList)malloc(sizeof(Node));
            New_node->date = c;
            New_node->next = NULL;
    
            if (Head_node ==NULL)
            {
                Head_node = New_node;
            }else
            {
                Tail_node->next = New_node;
            }
            
            Tail_node = New_node;
        }
        return Head_node;
    }
    //////////////////////////////
    //向链表中插入结点
    void insertlist(LinkList *List , int m , char insert_date)
    {//在链表List中,在第m个结点之后插入insert_date
    
        LinkList insert_node;//创建一个要插入的结点
        insert_node = (LinkList)malloc( sizeof(Node) );//为这个节点申请空间
        insert_node->date = insert_date;//把要插入的数据放入到这个结点中
    
        if (*List == NULL)
        {//如果这个链表为空链表,则直接插入到第一个节点
    
            *List = insert_node;
            insert_node->next = NULL;
        }else
        {
            LinkList befor_node = *List;//找到要插入位置的前一个结点
            for (size_t i = 1; i < m; i++)
            {
                befor_node = befor_node->next;
            }
            insert_node->next = befor_node->next;//插入节点指向第三个结点(即前一个结点本来指向的结点)
            befor_node->next = insert_node;//前一个结点指向插入结点
                    
        }
    }
    int main()
    {
        int n;
        char c;
        LinkList List , List2;
        //List用于第一次打印单链表,List2用于第二次打印单链表
        printf("请输入结点个数:");
        scanf("%d",&n);
        fflush(stdin);
        List = creatlinklist(n);
        List2 = List;//复制一遍链表,第一次打印链表后链表后头指针会直接指向NULL,导致第二次打印失败
        printf("打印单链表:");
        while ( List != NULL )
        {
            printf("%c" , List->date);
            List = List->next;
        }
        putchar('
    ');
    
        ///////////////////////////////
        //插入结点
        printf("在第几个结点后面插入字符:");
        scanf("%d",&n);
        fflush(stdin);
        printf("插入的字符为:");
        scanf("%c",&c);
        fflush(stdin);
        insertlist(&List2 , n , c);
        printf("打印单链表:");
        while ( List2 != NULL )
        {
            printf("%c" , List2->date);
            List2 = List2->next;
        }
    
    
        return 0;
    }
    

      

    运行结果:

  • 相关阅读:
    弧长的参方程表示形式
    selenium实例
    中英文混合分词
    准确率(Precision)、召回率(Recall)以及F值(F-Measure)
    安装zeromq以及zeromq的python示例
    uwsgi安装过程中遇到的问题
    安装python-devel 在升级到python2.7之后
    更新yum源
    yum mysql on centos 7
    vue--子组件主动获取父组件的数据和方法
  • 原文地址:https://www.cnblogs.com/jerryleesir/p/13294221.html
Copyright © 2011-2022 走看看