C语言数据结构实现链表逆序并输出

下面是C语言数据结构实现链表逆序并输出的完整攻略。

1. 题目分析

本题目要求实现对链表的逆序,并依次输出各节点的值。而链表的逆序可以通过改变各节点之间的连接方式来实现。

2. 思路分析

  1. 创建一个指针,指向原链表的头结点。
  2. 遍历链表,将每个节点的next指针指向它前面的节点,从而实现链表的逆序。
  3. 遍历逆序后的链表,从头结点开始,依次输出每个节点的值。

3. 代码实现

以下是C语言实现链表逆序并输出的代码示例:

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

struct node{
    int data;
    struct node *next;
};

//创建新节点并初始化
struct node *newNode(int val){
    struct node *p = (struct node*)malloc(sizeof(struct node));
    p->data = val;
    p->next = NULL;
    return p;
}

//构建链表
struct node *createList(int arr[], int n){
    struct node *head, *tail, *p;
    head = tail = NULL;
    for(int i = 0; i < n; i++){
        p = newNode(arr[i]);
        if(head == NULL){
            head = tail = p;
        }else{
            tail->next = p;
            tail = p;
        }
    }
    return head;
}

//链表逆序
struct node *reverseList(struct node *head){
    struct node *prev, *curr, *next;
    if(head == NULL || head->next == NULL){
        return head;
    }
    prev = NULL;
    curr = head;
    next = head->next;
    while(curr != NULL){
        next = curr->next;
        curr->next = prev;
        prev = curr;
        curr = next;
    }
    return prev;
}

//输出链表
void printList(struct node *head){
    while(head != NULL){
        printf("%d ", head->data);
        head = head->next;
    }
    printf("\n");
}

//主函数
int main(){
    int arr[] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    struct node *head, *newHead;
    head = createList(arr, n);
    printf("原链表:");
    printList(head);
    newHead = reverseList(head);
    printf("逆序后链表:");
    printList(newHead);
    return 0;
}

4. 示例说明

以下是两组输入输出示例:

示例一

输入:

arr = {1, 2, 3, 4, 5}
n = 5

输出:

原链表:1 2 3 4 5 
逆序后链表:5 4 3 2 1

示例二

输入:

arr = {2, 3, 5, 8, 9, 1, 4}
n = 7

输出:

原链表:2 3 5 8 9 1 4
逆序后链表:4 1 9 8 5 3 2

以上就是该问题的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言数据结构实现链表逆序并输出 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • C语言全面梳理结构体知识点

    C语言全面梳理结构体知识点 什么是结构体? 结构体是一种自定义的数据类型,它可以包含多个不同类型的成员变量,并且这些成员变量可以通过一个变量名来访问。结构体的定义需要使用关键字struct,并且需要指定结构体的类型名和成员变量。例如: struct Person { char name[20]; int age; float height; }; 以上代码就…

    数据结构 2023年5月17日
    00
  • Java数据结构之单链表的实现与面试题汇总

    Java数据结构之单链表的实现与面试题汇总 一、前言 单链表是数据结构中最基础的数据结构之一,也是在面试时经常会考察的一个知识点。本文将详细介绍单链表的实现过程,并对常见的单链表面试题进行总结,帮助大家深入了解单链表的原理和应用。 二、单链表的实现 单链表是由一些列节点构成的,每个节点包括一个数据和一个指向下一个节点的指针。下面我们将实现一个简单的单链表,并…

    数据结构 2023年5月17日
    00
  • C语言结构体struct详解

    C语言结构体struct详解 什么是结构体? 在C语言中,结构体是一种用户自定义的数据类型,它可以将不同的数据类型组合在一起形成一个新的数据类型。结构体主要由结构体名、成员和符号构成。 使用结构体可以方便地定义一些复杂的数据类型,例如表示一个学生信息的数据类型,可以包括姓名、学号、性别、年龄等信息。 结构体的定义和声明 结构体的定义通常放在函数外部,以便在整…

    数据结构 2023年5月17日
    00
  • JavaScript 处理树数据结构的方法示例

    下面是“JavaScript 处理树数据结构的方法示例”的完整攻略。 什么是树数据结构 树形数据结构是一种非常重要的数据结构,常被用于模拟现实中大量的层级结构。例如:文件目录、网站导航等。其是由一个根节点和若干个子节点构成的,每个节点可以有0个或多个子节点。 使用 JavaScript 处理树形数据结构 了解了树形数据结构后,我们可以使用 JavaScrip…

    数据结构 2023年5月17日
    00
  • C语言 数据结构中栈的实现代码

    下面是关于C语言中栈的实现代码的详细攻略: 栈的概念 栈是一种只能在一端进行插入或删除操作的线性数据结构,它具有后进先出(Last In First Out, LIFO)的特点。通俗的说,就像大家在平时搭积木那样,搭积木的时候总是从最下面开始往上搭,拿积木的时候总是从最上面的积木开始拿起,栈就是这么一个先进后出的数据结构。 栈的实现方法 栈的实现方法比较多,…

    数据结构 2023年5月17日
    00
  • qqwry.dat的数据结构图文解释第2/2页

    首先,对于“qqwry.dat的数据结构图文解释第2/2页”这个主题,我们需要先对其进行一些介绍。 qqwry.dat是一种IP地址转换工具,它可以将一个给定的IP地址转换成一个物理地址。它的数据结构是一种二叉查找树,在此二叉查找树中每个节点保存了一个IP地址段和该段IP地址所对应的物理地址的信息。这个数据结构的结构图可以在“qqwry.dat的数据结构图文…

    数据结构 2023年5月17日
    00
  • 浅谈iOS 数据结构之链表

    浅谈iOS 数据结构之链表 在计算机科学中,链表是一种数据结构,用于存储一系列按顺序排列的元素。链表的一个关键点是它不需要连续的内存空间来存储元素,相反,每个元素由一个指向下一个元素的指针组成。在iOS开发中,链表在各种场景下都有所应用,如UITableView和UICollectionView的数据源等。本文将详细讲解链表的基本知识和使用技巧。 链表的基本…

    数据结构 2023年5月17日
    00
  • 常用内核架构

      本文分享自天翼云开发者社区《常用内核架构》,作者:JackW   宏内核 应用程序调用内存分配的 API(应用程序接口)函数。 处理器切换到特权模式,开始运行内核代码。 内核里的内存管理代码按照特定的算法,分配一块内存。 把分配的内存块的首地址,返回给内存分配的 API 函数。 内存分配的 API 函数返回,处理器开始运行用户模式下的应用程序,应用程序就…

    算法与数据结构 2023年4月22日
    00
合作推广
合作推广
分享本页
返回顶部