金鳞

目标->软件测试架构师

/*
Author:c++_cracker007小朋友
Date:200904023
*/
#include <stdio.h>
#include <malloc.h>

typedef struct node
{
    char name[20];
    struct node *link;
}stud; /*声明链表*/
   
stud* ReverseList(stud* head) //反转链表的指向
{
    stud *p,*q,*r; /*辅助结点*/
    p = head;  /*首结点赋给p*/
    q = p->link;  /*p的下一个结点为q*/
   
/*
循环如下:
开始:                  p->q->r
举例:                  1->2->3
q ->link = p; 之后:   q->p
举例:                        2->1
最后:                        r->q
举例                            3->2
*/
    while (strcmp(q->name,"-1")) /*当q所指结点的数据域为-1时,退出这个循环*/
    {
        r = q ->link; /*q的下一个结点为r,也就是第三个结点为r*/
  q ->link = p; /*没有执行此句之前q->link为第三个结点r*/
  /*执行此句之后,p变为q->link,p变成了q的下一个结点*/
  p = q;/*让q变成p,即第二个结点变成第一个结点*/
  q = r;/*让r变成q,即让第三个结点变成第二个结点*/
  }
  free(q);/*释放q的内存*/
  head->link = NULL;/*原来的链头变成链尾*/
  head = p;/*原来的链尾变成链头*/
  return head;
}
     
int main(int argc, char *argv[])
{
    stud* head=(stud*)malloc(sizeof(stud));/*给链表分配内存*/
    stud* p=head;
    scanf("%s",p->name);
    while(strcmp(p->name,"-1"))/*建立链表,遇到-1就跳出循环*/
    {
        p->link=(stud*)malloc(sizeof(stud));
        p=p->link;
        scanf("%s",p->name);
    }   
    head=ReverseList(head);
    p=head;
    while(p) /*输出链表*/
    {
        printf("%s\n",p->name);
        p=p->link;
    }   
    p=head->link;
    while(p) /*释放链表*/
    {
        free(head);
        head=p;
        p=p->link;
    }   
    free(head);
    system("PAUSE"); 
    return 0;
}

posted on 2009-04-23 14:55 金鳞 阅读(327) 评论(0)  编辑 收藏 引用 所属分类: C
只有注册用户登录后才能发表评论。