链表的简单操作

来源:互联网 发布:房屋外观设计简单软件 编辑:程序博客网 时间:2024/05/22 07:05
#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;}List Read(){    //创建链表 int n;scanf("%d",&n);List head,p,q;head=NULL;int i,a;for(i=0;i<n;i++){scanf("%d",&a);p=(List)malloc(sizeof(struct Node));p->Data=a;p->Next=NULL;if(head==NULL) head=p;else q->Next=p;q=p;}return head;}void Print( List L ){  //打印链表 List t;t=L;while(t!=NULL){printf("%d ",t->Data);t=t->Next;}printf("\n");}/*List Reverse( List L ){  //借助辅助空间      List p1=NULL,p2;     while(L!=NULL){     p2=(List)malloc(sizeof(struct Node));     if(p1==NULL) p2->Next=NULL;     else p2->Next=p1;     p1=p2;     p2->Data=L->Data;     L=L->Next; }return p1;}*/List Reverse( List L ){//原地逆转 List p=L,q=NULL,listend=L;if(L==NULL) return NULL;while(listend->Next!=NULL) listend=listend->Next;while(p!=listend){L=p->Next;listend->Next=p;if(q==NULL) p->Next=NULL;else p->Next=q;q=p;p=L;}return L;}


原创粉丝点击