4-1 单链表逆转 (20分)

来源:互联网 发布:matlab 2016b mac安装 编辑:程序博客网 时间:2024/06/11 07:38
本题要求实现一个函数,将给定的单链表逆转。函数接口定义: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;}/* 你的代码将被嵌在这里 */输入样例:51 3 4 5 2输出样例:12 5 4 3 1

———-具体实现代码

//注意该题是不带头结点的链表List Reverse( List L ){    if (L == NULL){return L;}    List current,after,tempHead;    tempHead = L;    current = L->Next;    L->Next = NULL; //没考虑到,程序判断运行超时;    while (current){        after = current->Next;        current->Next = tempHead;        tempHead = current;        current = after;    }    L = tempHead;    return L;}

另外附上带头结点的代码,未经测试:

/* 这是带头结点的程序代码,PAT本题是不带头结点,区别处理是不带头结点的代码需要另外的临时    变量来保存头指针*/List Reverse1( List L ){    if(L == NULL) return L;    List current = L->Next;    List after;    L->Next = NULL;    while(current != NULL){        after = current->Next;        current->Next = L->Next;        L->Next = current;        current = after;    }    return L;//要返回L,因为函数体需要返回值,这个与传入地址函数体类型是void,但是地址还是改变了注意区别理解,其实本质相同}
0 0
原创粉丝点击