玩转链表

来源:互联网 发布:it香港 编辑:程序博客网 时间:2024/06/07 11:22
 
/*
author:Li Shihua
20:00 Mar.3 2012 All Rights Reserved. 
*/
 
#include <stdio.h>#include <malloc.h>typedef struct node{int number;struct node *next;}PLINKEDLIST,*LPLINKEDLIST;LPLINKEDLIST CreateTail()                   //尾插法创建链表{LPLINKEDLIST p1=NULL;         LPLINKEDLIST p2=NULL;LPLINKEDLIST head=NULL;head = (LPLINKEDLIST)malloc(sizeof(PLINKEDLIST));p1=head;while(scanf("%d",&p1->number)==1){if(p1->number==0)                   //当输入元素为0时结束创建。break;p2=(LPLINKEDLIST)malloc(sizeof(PLINKEDLIST));p1->next=p2;p1=p1->next;p2=NULL;}    p1->next=NULL;return head;}LPLINKEDLIST CreateHead()                   //头插法创建链表{LPLINKEDLIST p1=NULL;   LPLINKEDLIST head=NULL;do{if(head!=NULL){if(head->number==0)             //当输入元素为0时结束创建。break;}p1 = (LPLINKEDLIST)malloc(sizeof(PLINKEDLIST));p1->next=head;head = p1;p1=NULL;}while(scanf("%d",&head->number)==1);return head;}void PrintLinkedList(LPLINKEDLIST head)     //打印链表中的元素{LPLINKEDLIST p=head;if(p==NULL){printf("链表为空!\n");}while(p!=NULL){printf("%d ",p->number);p=p->next;}printf("\n");}LPLINKEDLIST ConverseLinkedList(LPLINKEDLIST head) //输入为一个单链表,输出为这个链表的逆至。{LPLINKEDLIST p1=head;LPLINKEDLIST p2=NULL;LPLINKEDLIST P3=NULL;if(p1==NULL){printf("链表为空!\n");}p2=p1->next;while(p2!=NULL){P3 = p2->next;p2->next = p1;p1 = p2;p2 = P3;}head->next=NULL;head=p1;return head;}int main(){printf("请输入链表元素:\n");LPLINKEDLIST head1=CreateHead();         PrintLinkedList(head1);LPLINKEDLIST head2=ConverseLinkedList(head1);PrintLinkedList(head2);return 0;}

待续。。。

原创粉丝点击