(C语言)单链表的就地逆置 (40 分)

简介: (C语言)单链表的就地逆置 (40 分)

本题目要求编写一个实现带头结点单链表就地逆置的一个程序。在编写该程序时,要求单独写一个函数来实现单链表的逆置,并编写代码在main函数测试结果。

输入格式:

首先输入一个整数N,表示测试数据的组数,然后是N组测试数据。每组测试数据在一行上先输入数据个数n及n个整数。

输出格式:

对于每组测试,输出逆置后的单链表,每两个数据之间留一个空格,行末不能有多余的空格。

输入样例:

在这里给出一组输入。例如:

1
10 5 8 10 3 9 1 39 28 20 57

输出样例:

在这里给出相应的输出。例如:

57 20 28 39 1 9 3 10 8 5

输入样例:

在这里给出一组输入。例如:

3
10 6 10 3 8 2 7 0 19 30 45
4 28 12 23 67
20 12 15 25 6 4 10 23 3 8 43 2 7 5 16 29 61 30 19 42 38

输出样例:

在这里给出相应的输出。例如:

45 30 19 0 7 2 8 3 10 6
67 23 12 28
38 42 19 30 61 29 16 5 7 2 43 8 3 23 10 4 6 25 15 12

题解

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

typedef struct Node{
    int data;
    struct Node *next;
}LNode,*LinkList;

void InsertListHead(LinkList L,int x){
    LinkList s = (LinkList)malloc(sizeof(LNode));
    s->data = x;
    s->next = L->next;
    L->next = s;
}
void PrintList(LinkList L){
    LinkList p = L->next;
    while(p){
        if(p->next!=NULL){
            printf("%d ",p->data);
            p = p->next;
        }else{
            printf("%d",p->data);
            p = p->next;
        }
    }
}

int main(){
    LinkList L = (LinkList)malloc(sizeof(LNode));
    L->next = NULL;
    int n,m,temp;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&m);
        for(int i=0;i<m;i++){
            scanf("%d",&temp);
            InsertListHead(L,temp);
        }
        PrintList(L);
        if(i!=n-1)
            printf("\n");
        L->next = NULL;
    }
    return 0;
}
相关文章
|
1月前
|
存储 编译器 C语言
【数据结构】C语言实现单链表万字详解(附完整运行代码)
【数据结构】C语言实现单链表万字详解(附完整运行代码)
53 0
|
1月前
|
C语言
C语言用头插法建立单链表
C语言用头插法建立单链表
7 0
|
1月前
|
算法 C语言
【算法与数据结构】 C语言实现单链表队列详解2
【算法与数据结构】 C语言实现单链表队列详解
|
1月前
|
存储 算法 C语言
【算法与数据结构】 C语言实现单链表队列详解1
【算法与数据结构】 C语言实现单链表队列详解
|
1月前
|
存储 C语言
C语言之单链表的实现以及链表的介绍
C语言之单链表的实现以及链表的介绍
|
1月前
|
存储 C语言
数据结构之单链表详解(C语言手撕)
数据结构之单链表详解(C语言手撕)
51 1
|
1月前
|
算法 C语言
C语言单链表去重,C语言字符串逆置
C语言单链表去重,C语言字符串逆置
18 0
|
1月前
|
C语言
c语言 郝斌 单链表代码
c语言 郝斌 单链表代码
|
1月前
|
C语言
C语言第三十四弹--矩形逆置
C语言第三十四弹--矩形逆置
|
1月前
|
存储 C语言
[C语言/PTA] 单链表结点删除
[C语言/PTA] 单链表结点删除
64 0