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日

相关文章

  • Redis的六种底层数据结构(小结)

    Redis的六种底层数据结构(小结) 简介 Redis是一种基于内存的高效键值存储数据库,它支持六种不同的数据结构来存储数据。这些结构旨在提供高速、灵活和功能强大的一系列功能。在学习Redis时,了解这些数据结构可以帮助您更好地使用Redis并更好地解决您的问题。 Redis的六种底层数据结构 Redis支持以下六种不同的数据结构: String (字符串)…

    数据结构 2023年5月17日
    00
  • C数据结构之双链表详细示例分析

    作为本网站的作者,我很高兴为你讲解C数据结构之双链表详细示例分析的完整攻略。 双链表简介与定义 双链表是链表的一种,在链表中每一个节点都有一个指针域,指向下一个节点,这个指针域称为next指针;而在双链表中每一个节点也有两个指针域,一个指向前驱节点,另一个指向后继节点,即prev指针与next指针。由于双链表存在两个指针域,因此它支持双向遍历,无论是正向还是…

    数据结构 2023年5月17日
    00
  • C语言数据结构之二叉树详解

    C语言数据结构之二叉树详解 什么是二叉树? 二叉树是一种非常常用的数据结构,它具有以下几个特点: 在二叉树中,每个节点最多有两个子节点,其中一个称为左子节点,另一个称为右子节点。 每个节点都有一个值,这个值可以是任意类型的,比如整数、字符、指针等等。 可以使用递归的方式来遍历一个二叉树,具体包括前序遍历、中序遍历和后序遍历。 二叉树的存储方式 二叉树可以使用…

    数据结构 2023年5月17日
    00
  • C语言数据结构之模式匹配字符串定位问题

    C语言数据结构之模式匹配字符串定位问题 什么是模式匹配字符串定位? 模式匹配字符串定位即在一个文本串中匹配一个模式串,并且返回模式串在文本串中第一次出现的位置。 例如,对于文本串“this is a test string”,我们想要匹配模式串“test”,我们期望得到的结果是第一次出现的位置为10。 KMP算法 算法思路 KMP算法是一种高效的字符串匹配算…

    数据结构 2023年5月16日
    00
  • JavaScript 数据结构之散列表的创建(2)

    下面是详细讲解“JavaScript 数据结构之散列表的创建(2)”的完整攻略。 散列表(哈希表) 散列表是一种数据结构,使用哈希函数将键映射到索引。散列表可以在常量时间 O(1) 中进行插入、删除和查找操作,但也具有碰撞冲突问题。 碰撞冲突问题 在散列表中,当两个不同的键通过哈希函数映射到了同一个索引位置时,就会发生碰撞冲突问题。解决碰撞冲突问题的方法有很…

    数据结构 2023年5月17日
    00
  • 1811 E Living Sequence 两种解法

    思维 进制转换 数位DP 无前导0 T3Problem – 1811E – Codeforces 题目大意 从一个不含有数字4的递增序列中找第k个数并输出。如 \(1,2,3,5,6,7,8,9,10,11,12\), \(k = 4\) 时输出 \(5\)。 思路1 有一个巧妙的解法:考虑这个问题, 从一个没有限制的从1开始的递增序列找出第k个数, 显然就…

    算法与数据结构 2023年4月17日
    00
  • Go语言数据结构之插入排序示例详解

    Go语言数据结构之插入排序示例详解 什么是插入排序? 插入排序是一种简单直观的排序方法,其基本思想是将一个待排序的序列分成已排序和未排序两部分,从未排序的部分中选择一个元素插入到已排序部分的合适位置,直到所有元素都被插入到已排序部分为止。 插入排序示例 示例1 我们来看一个数字序列的插入排序示例: package main import "fmt&…

    数据结构 2023年5月17日
    00
  • Lua中使用table实现的其它5种数据结构

    Lua中使用table可以实现多种数据结构,除了Lua原生支持的数组、哈希表之外,我们还可以用table来实现其他五种数据结构,这些数据结构包括集合(Set)、队列(Queue)、双端队列(deque)、堆栈(stack)以及链表(List)。 Set 集合数据结构中的元素是无序的、不重复的。使用table来实现集合数据结构,可以将元素作为table的key…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部