Chinaunix首页 | 论坛 | 博客
  • 博客访问: 917297
  • 博文数量: 194
  • 博客积分: 7991
  • 博客等级: 少将
  • 技术积分: 2067
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-09 22:03
文章分类

全部博文(194)

文章存档

2010年(8)

2009年(71)

2008年(109)

2007年(6)

我的朋友

分类:

2008-02-25 09:22:09

 
利用三个连续指针cur、fw1、fw2,从头(设定为slink)开始指向三个节点,然后进行反转操作,循环进行:
 

//最开始的状态
cur = slink;
fw1 = slink->next;
fw2 = fw1->next;
slink->next = NULL;

//反转一次
fw1->next = cur;
cur = fw1;
fw1 = fw2;
fw2 = fw2->next;

完整的代码请参考:

struct mynode{
    int data;
    struct mynode *next;
};

struct mynode *single_link_reverse(struct mynode *slink)
{
    struct mynode *cur;
    struct mynode *fw1;
    struct mynode *fw2;

    /* zero or one node*/
    if (NULL == slink || NULL == slink->next)
        return slink;

    cur = slink;
    fw1 = slink->next;
    fw2 = fw1->next;
    slink->next = NULL;

    /*two nodes*/
    if (NULL == fw2)
    {
        fw1->next = cur;
        return fw1;
    }

    /*three+ nodes*/
    while (NULL != fw2)
    {
        fw1->next = cur;
        cur = fw1;
        fw1 = fw2;
        fw2 = fw2->next;
    }

    /*now fw1 is the last node*/
    fw1->next = cur;
    return fw1;
}

sxg

 

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

chinaunix网友2008-02-25 11:13:05

真受不了你,搞这么罗罗嗦嗦干嘛? struct node { int data; struct node* next; }; struct node* reverse_link(struct node* p) { struct node* pr = NULL; struct node* tmp; while (p) { tmp = p->next; p->next = pr; pr = p; p = tmp; } return pr; }