6-1 单链表逆转(20 point(s))

来源:互联网 发布:淘宝退货折旧费怎么算 编辑:程序博客网 时间:2024/05/29 16:12

6-1 单链表逆转(20 point(s))

本题要求实现一个函数,将给定的单链表逆转。

函数接口定义:

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 1code:
List Reverse( List L ){//从头上顺序插入元素即可逆转  List p,q;  p = L;  L = NULL;//要返回的指针  while(p!=NULL){//遍历     List temp;//临时指针     temp = L;//先临时保存下q之前后面所指的一串     L = p;//在q的后面直接插入L中的下一个元素     p = p->Next;//L下一个元素     L->Next = temp;//再让这个插入的元素的下一个等于刚才已有的一串,实现在头上插入元素*****  }//注意!!!!9,10行的语句不可以交换如果交换后原来的串就丢失了,9行这句话就是为了先保存下后面的一串  return L;}