Reverse Linked List

来源:互联网 发布:相片冲印软件 编辑:程序博客网 时间:2024/04/30 11:35

Write a nonrecursive procedure to reverse a singly linked list in O(N)O(N)O(N) time using constant extra space.

Format of functions:

List Reverse( List L );

where List is defined as the following:

typedef struct Node *PtrToNode;typedef PtrToNode List;typedef PtrToNode Position;struct Node {    ElementType Element;    Position Next;};

The function Reverse is supposed to return the reverse linked list ofL, with a dummy header.

Sample program of judge:

#include <stdio.h>#include <stdlib.h>typedef int ElementType;typedef struct Node *PtrToNode;typedef PtrToNode List;typedef PtrToNode Position;struct Node {    ElementType Element;    Position Next;};List Read(); /* details omitted */void Print( List L ); /* details omitted */List Reverse( List L );int main(){    List L1, L2;    L1 = Read();    L2 = Reverse(L1);    Print(L1);    Print(L2);    return 0;}/* Your function will be put here */

Sample Input:

51 3 4 5 2

Sample Output:

2 5 4 3 12 5 4 3 1
result:
List Reverse( List L ){ Position p1,p2,p3,head,temp; if(L==NULL||L->Next==NULL)  return L; p1=L; p2=p1->Next; p3=p2; temp=L->Next; while(p3->Next!=NULL) {  p3=p2->Next;  p2->Next=p1;p1=p2;p2=p3; } p2->Next=p1; temp->Next=NULL; L->Next=p2; return L;}
0 0
原创粉丝点击