卡码网刷题记录19-21

文章讲述了如何使用C语言实现单链表的反转、删除重复元素,以及根据前序遍历和中序遍历构造二叉树并进行后序遍历的过程。
摘要由CSDN通过智能技术生成

19.单链表反转

题目描述

根据一个整数序列构造一个单链表,然后将其反转。

例如:原单链表为 2 3 4 5 ,反转之后为5 4 3 2

输入描述

输入包括多组测试数据,每组测试数据占一行,第一个为大于等于0的整数n,表示该单链表的长度,后面跟着n个整数,表示链表的每一个元素。整数之间用空格隔开

输出描述

针对每组测试数据,输出包括两行,分别是反转前和反转后的链表元素,用空格隔开

如果链表为空,则只输出一行,list is empty

输入示例

5 1 2 3 4 5 
0

输出示例

1 2 3 4 5 
5 4 3 2 1 
list is empty

题解(C语言):

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

// 定义链表节点结构体
struct LinkedNode {
    int val;
    struct LinkedNode* next;
};

struct LinkedNode* reverseList(struct LinkedNode* head) {
    struct LinkedNode* temp; // 保存 cur 的下一个节点
    struct LinkedNode* cur = head;
    struct LinkedNode* pre = NULL;
    while (cur) {
        temp = cur->next; // 保存一下 cur 的下一个节点,因为接下来要改变 cur->next
        cur->next = pre; // 翻转操作
        // 更新 pre 和 cur 指针
        pre = cur;
        cur = temp;
    }
    return pre;
}

void printLinkedList(struct LinkedNode* head) {
    struct LinkedNode* cur = head;
    while (cur != NULL) {
        printf("%d ", cur->val)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值