Chinaunix首页 | 论坛 | 博客
  • 博客访问: 10658
  • 博文数量: 4
  • 博客积分: 140
  • 博客等级: 入伍新兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-08 10:47
文章分类
文章存档

2011年(1)

2009年(3)

我的朋友

分类: C/C++

2009-11-08 22:47:39

较一般的方法,通过两个局部变量分别指示相邻的两个节点,将后一个节点的next指针指向前一个节点,遍历链表。first初始化为NULL,以便将反序前链表头next指针置为NULL。

#include <assert.h>

struct node
{
    int value;
    struct node *next;
};

typedef struct node NODE;

NODE *reverse_list2(NODE *phead)
{
    NODE *first=NULL,*second=phead;
    assert(NULL!=phead);

    while(NULL!=phead)
    {
        second=phead->next;
        phead->next=first;
        first=phead;
        phead=second;
    }
    return first;
}

void print_list(NODE *phead)
{
    while(NULL!=phead)
    {
        printf("%4d",phead->value);
        phead=phead->next;
    }
}



int main()
{
    NODE p1,p2,p3;
    p1.value=5;
    p1.next =
&p2;


    p2.value=8;
    p2.next=&p3;

    p3.value=12;
    p3.next=NULL;

    NODE *head=&p1;

    print_list(head);
    printf("\n");
    head=reverse_list2(head);
    print_list(head);

    return 0;
}


阅读(488) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~