数据结构练习:链表扩容

大致步骤:

一:创建一个新链表,遍历原链表的同时,将原链表的值复制给新链表

二:将新链表插入到原链表中(大致如下)

注:

1.头结点是不存有数据的

2.记得malloc后要free

3.*&是c++的写法,等同于c中的*

答案:

#define _CRT_SECURE_NO_WARNINGS 1  

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

#define SIZE 100  

typedef int ElemType;

typedef struct LNode {
    ElemType data;
    struct LNode* next;
} LinkNode;

void CreateListR(LinkNode*& L, ElemType a[], int n) {
    LinkNode* s, * r;
    L = (LinkNode*)malloc(sizeof(LinkNode));
    L->next = NULL;
    r = L;
    for (int i = 0; i < n; i++) {
        s = (LinkNode*)malloc(sizeof(LinkNode));
        s->data = a[i];
        r->next = s;
        r = s;
    }
    r->next = NULL;
}

void DispList(LinkNode* L) {
    LinkNode* p = L->next;
    while (p != NULL) {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}

void listExpansion(LinkNode*& L) 
{
    assert(L!=NULL);   //避免传进空指针
    LinkNode* l = L;
    LinkNode* p= (LinkNode*)malloc(sizeof(LinkNode));   //建立一个新链表
    p->next = NULL;
    LinkNode* p1 = p;   //复制新链表的头结点
    while (l != NULL)       //将原链表的值复制给新链表
    {
        LinkNode*s= (LinkNode*)malloc(sizeof(LinkNode));
        s->data = l->next->data;
        p1->next = s;
        l = l->next;
        p1 = p1->next;
        if (l->next == NULL)        //如果复制到最后一个结点就break
        {
            break;
        }
    }
    p1 = NULL;      //末尾接上NULL
    l = L->next;      //复制旧链表的头结点
    p1 = p->next;     //复制新链表的头结点
    while (l!=NULL)      //将新链表插入到原链表
    {
        LinkNode* l1 = l->next;
        LinkNode* p2 = p1->next;
        l->next = p1;
        p1->next = l1;
        p1 = p2;
        l = l1;
    }
}

int main() {
    int a[SIZE];
    int n, i;
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }

    LinkNode* p;
    CreateListR(p, a, n);

    listExpansion(p);
    // 释放链表内存  
    DispList(p);
    LinkNode* temp;
    while (p != NULL) {    //归还申请空间
        temp = p;
        p = p->next;
        free(temp);
    }
    return 0;
}

相关推荐

  1. 数据结构

    2024-05-01 23:00:03       54 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-01 23:00:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-01 23:00:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-01 23:00:03       87 阅读
  4. Python语言-面向对象

    2024-05-01 23:00:03       97 阅读

热门阅读

  1. sql连续登录

    2024-05-01 23:00:03       29 阅读
  2. SQL:SUBSTR函数的基本介绍

    2024-05-01 23:00:03       34 阅读
  3. python 笔记:cls VS self

    2024-05-01 23:00:03       33 阅读
  4. Linux 第十六章

    2024-05-01 23:00:03       33 阅读
  5. Day27-Linux系统服务管理知识2

    2024-05-01 23:00:03       31 阅读
  6. 基于C8051F340单片机的舵机简单控制程序

    2024-05-01 23:00:03       32 阅读
  7. MongoDB聚合运算符:$sqrt

    2024-05-01 23:00:03       34 阅读
  8. 笨蛋学C++之 C++对数据库实现CRUD

    2024-05-01 23:00:03       37 阅读
  9. vue3父组件调用子组件方法

    2024-05-01 23:00:03       33 阅读
  10. 如何将API 中的excel 文件load 到 Azure blob 中

    2024-05-01 23:00:03       36 阅读
  11. .requires_grad,.detach(),torch.no_grad()

    2024-05-01 23:00:03       30 阅读
  12. C/C++中的整数除法运算与汇编指令DIV和IDIV

    2024-05-01 23:00:03       35 阅读
  13. 如何看待AIGC技术

    2024-05-01 23:00:03       29 阅读