单链表的逆转

来源:互联网 发布:crt连接虚拟机centos 编辑:程序博客网 时间:2024/05/16 09:47

单链表的逆转方法多种,下面是一种常用且方便的方法,我起了个名字,叫做“头插法翻转原链表”。

#include <stdio.h>#include <iostream>#include <stdlib.h>#define MAX 1000typedef int ElementType;typedef struct Node *PtrToNode;struct Node{    ElementType Data;    PtrToNode Next;} ;typedef PtrToNode List;List Read(){    int n,i;    int *p;    p=new int[10];    scanf("%d",&n);    for(i=0;i<n;i++) scanf("%d",&p[i]);    List head,q,s;    head=new Node;    q=new Node;    head->Next=q;    q->Data=p[0];    for(i=1;i<n;i++)    {        s=new Node;        s->Data=p[i];        q->Next=s;        q=s;    }    q->Next=NULL;    return head;}void  Print(List L){    L=L->Next;   while(L->Next!=NULL)   {      printf("%d ",L->Data);       L=L->Next;   }   printf("%d\n",L->Data);   return ;}List Reverse(List L){    if(L==NULL) return NULL;    List p,q,r,head;    head=L;    q=p=head->Next;    if(p==NULL) return head;    head->Next=NULL;             //head结点后为空    while(p)    {       q=q->Next;             //q结点为正操作结点p的后一个节点       p->Next=head->Next;   //每次将p结点插到头结点和开始节点之间,同时head->next=NULL,即将NUll的值赋给p->next;       head->Next=p;          //再将头结点L指向p结点       p=q;    }    return head;}int main(){    List L1,L2;    L1=Read();    Print(L1);    L2=Reverse(L1);    Print(L2);    return 0;}
0 0
原创粉丝点击