单链表逆转

6-1 单链表逆转(20 分)
本题要求实现一个函数,将给定的单链表逆转。

函数接口定义:

List Reverse( List L );
其中List结构定义如下:

typedef struct Node PtrToNode;
struct Node {
ElementType Data; /
存储结点数据 /
PtrToNode Next; /
指向下一个结点的指针 /
};
typedef PtrToNode List; /
定义单链表类型 */
L是给定单链表,函数Reverse要返回被逆转后的链表。

裁判测试程序样例:

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

typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
    ElementType Data;
    PtrToNode   Next;
};
typedef PtrToNode List;

List Read(); /* 细节在此不表 */
void Print( List L ); /* 细节在此不表 */

List Reverse( List L );

int main()
{
    List L1, L2;
    L1 = Read();
    L2 = Reverse(L1);
    Print(L1);
    Print(L2);
    return 0;
}

/* 你的代码将被嵌在这里 */
输入样例:

5
1 3 4 5 2
输出样例:

1
2 5 4 3 1

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

typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
    ElementType Data;
    PtrToNode   Next;
};
typedef PtrToNode List;

List Read(){
    int len = 0;
    int num = 0;
    PtrToNode list = NULL;
    PtrToNode last = NULL;
    scanf("%d",&len);
    if (len==0)
    {
        return NULL;
    }
    scanf( "%d",&num );
    list=(List)malloc(sizeof(struct Node));
    list->Data = num;
    list->Next = NULL;
    last = list;
    len--;
    while(len){
        scanf( "%d",&num );
        PtrToNode node = (List)malloc(sizeof(struct Node));
        node->Data=num;
        node->Next = NULL;
        last->Next = node;
        last = node;
        len--;
    }
    return list;

}
void Print( List L ){
    if (L==NULL)
    {
        return ;
    }
    while(L!=NULL){
        printf("%d ",L->Data);
        L=L->Next;
    }
    putchar('\n');
}

List Reverse( List L ){
    List t=NULL;
    List newlist=NULL;
    while(L!=NULL){
        t=L->Next;
        L->Next=newlist;
        newlist=L;
        L=t;
    }
    return newlist;
}

int main()
{
    List L1, L2;
    L1 = Read();
    L2 = Reverse(L1);
    Print(L1);
    Print(L2);
    return 0;
}

思路:创建一个新的链表,
第一次:L->Next=newlist;先让L这个节点指向空,而后,再把L这个节点赋给newlist.
第二次:由于newlist这个节点是之前的L节点,则数据域为3的这个节点(L->next)指向了数据域为1的这个节点,再把数据域为3的这个节点赋给newlist.
.....依次循环下去
单链表的逆转就此完成

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本题要求实现一个函数,将给定的单链表逆转。函数接口定义: 其中List结构定义如下: L是给定单链表,函数Reve...
    日常表白结衣阅读 4,457评论 0 0
  • 本文内容:1、 什么是链表?2、 链表共分几类?3、 链表的 C 实现! 总表:《数据结构?》 工程代码 Gith...
    半纸渊阅读 40,139评论 0 54
  • 作为一个资深的新手程序员😂,链表这些既基础又深奥的东西是日常工作中并不常见,但是却非常重要,所以就总结一下链表的简...
    Clark_new阅读 9,753评论 4 12
  • 链表问题是面试过程中经常被问到的一部分,很考查编程功底。最近刷了 LeetCode 上链表部分的面试题,我总结了一...
    JohnnyShieh阅读 10,396评论 0 9
  • 1、奥巴马医保方案的三大特点 《患者保护与平价医疗法案》(Patient Protection and Affor...
    随思录阅读 1,631评论 0 0