原文:
http://nkshili.spaces.live.com/blog/cns!BB418D20B454CBE7!1489.entry
/*
两种方法,一种是直接把每个位置都倒转,最后头节点指向本来是尾巴的节点,另一个是每次拿到一个节点都插入到头节点后。
*/
#include <stdio.h>
#include <stdlib.h>
//结点类型定义
typedef struct Node
{
int number; //数据域
struct Node *next; //指针域
}*PtrNode
//第一个方法:
void reverse_link_1(PtrNode link)
{
PtrNode first,second,ptr;
if(link->next==NULL)
{
return;
}
ptr=link->next;
first=ptr->next;
ptr->next=NULL;
while(ptr!=NULL)
{
if(first==NULL)
{
link->next=ptr;
break;
}
else
{
second=first->next;
first->next=ptr;
ptr=first;
first=second;
}
}
}
//第二个方法:
void reverse_link_2(PtrNode link)
{
PtrNode ptr,temp;
if(link->next==NULL)
{
return;
}
ptr=link->next;
while(ptr->next!=NULL)
{
temp=ptr->next;
ptr->next=ptr->next->next;
temp->next=link->next;
link->next=temp;
}
}
void fill_link(PtrNode link)
{
PtrNode ptr,temp;int i;ptr=link;for(i=0;i<10;i++){
temp=(PtrNode)malloc(sizeof(struct Node));
temp->number=i;
temp->next=NULL;
ptr->next=temp;
ptr=ptr->next;
}
}
void print_link(PtrNode link)
{
PtrNode ptr=link->next;printf("Link:\n");while(ptr!=NULL){
printf("%d\t",ptr->number);
ptr=ptr->next;
}printf("\n");
}
void free_link(PtrNode link)
{
PtrNode ptr=link;while(ptr->next!=NULL){
PtrNode temp=ptr->next;
ptr->next=temp->next;
free(temp);
}
}
int main()
{
PtrNode head;head=(PtrNode)malloc(sizeof(struct Node));head->next=NULL;head->number=-1;fill_link(head);
print_link(head);
reverse_link_1(head);
print_link(head);
reverse_link_2(head);
print_link(head);
free_link(head);
print_link(head);
free(head);system("PAUSE");
return 0;
}
运行结果:
posted on 2010-09-12 23:57
CrazyNerd 阅读(375)
评论(0) 编辑 收藏 引用 所属分类:
数据结构与算法