随笔-27  评论-6  文章-0  trackbacks-0
原文: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)  编辑 收藏 引用 所属分类: 数据结构与算法

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理