首页 > 学院 > 开发设计 > 正文

链表的输入输出及逆转

2019-11-08 01:46:11
字体:
来源:转载
供稿:网友

对于链表,输入输出以及逆转是比较常见的,输入输出时可以根据自己的需要调整,我这写的c程序是输入一个链表的长度,然后输入链表各节点数据,最后输出顺序的数据以及逆序的数据。给了三个函数,分别是输入输出以及逆转的程序。

先给出一个输入输出函数:

#include<stdio.h>#include<stdlib.h>typedef struct node * List;struct node{	int data;	List next;};List read(){	int len,num;	List first,second,third;	scanf("%d",&len);	scanf("%d",&num);	first=(List)malloc(sizeof(struct node));	first->data=num;	first->next=NULL;	second=first;	len--;	while(len--)	{		scanf("%d",&num);		third=(List)malloc(sizeof(struct node));		third->data=num;		third->next=NULL;		second->next=third;		second=third;	}	return first;}int main(){	List L1;	L1=read();	while(L1->next!=NULL)	{		PRintf("%d ",L1->data);		L1=L1->next;	}	printf("%d/n",L1->data);	return 0;}运行如图。

单链表逆转也和上面类似,多了一个逆转过程:

#include <stdio.h>  #include<stdlib.h>typedef int ElementType;  typedef struct Node * PtrToNode;typedef PtrToNode List; struct Node {      ElementType Data;      PtrToNode   Next;  };   int main()  {  	List Read();     void Print( List L );      List Reverse( List L ); //函数声明      List L1, L2;      L1 = Read();  	Print(L1);      L2 = Reverse(L1);  //如果将这一行和上面一行交换位置,就会不一样,输出L1的时候就会只有一个数。    Print(L2);      return 0;  }  List Read()  {    int len;  int num;  List list;  List last;  List node;  scanf( "%d",&len );  if(  len == 0  )    return NULL;  scanf( "%d",&num );  list = ( PtrToNode )malloc( sizeof( struct Node ) );  list->Data = num;  list->Next = NULL;  last = list;  len--;  while(  len-- ){    scanf( "%d",&num );	node= ( List )malloc(sizeof(struct Node));    node->Data = num;    node->Next = NULL;    last->Next = node;    last = node;  }  return list;}  void Print( List L )  {      if(L==NULL)      return ;	else    while(L!=NULL){          printf("%d ",L->Data);          L=L->Next;      }    putchar('/n');  }  List Reverse( List L ){    PtrToNode t=NULL;    PtrToNode newlist=NULL;    while(L!=NULL){        t=L->Next;      //用t保存L的下一个节点,否则L->next就丢失了,方便L的移动         L->Next=newlist;//L指向它的前一个节点         newlist=L;      //newlist指向已经逆转的最后一个节点         L=t;        //将L移动到下一个元素     }    return newlist;} 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表