| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1676 人关注过本帖, 1 人收藏
标题:单链表反转输出问题
只看楼主 加入收藏
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
结帖率:94.74%
收藏(1)
 问题点数:0 回复次数:3 
单链表反转输出问题
在百度搜了一些,感觉还没领悟透彻,总有些迷迷糊糊。

    百度一般都是如此程序:
void Reversal()
{
    if(head != NULL)
    {
        Node *p = NULL, *n = head->next;
        for(; n != NULL;)
        {
            head->next = p;
            p = head;
            head = n;
            n = n->next;
        }
    }
}

    现在我想要反转之后再输出,如:1,2,3,4,5,6,反转后为:6,5,4,3,2,1;
  
    可是现在的输出卡住了(因为我还没把链表全部领悟透),哪位朋友帮个忙,把程序输出函数写出来,感激不尽。谢谢。
搜索更多相关主题的帖子: 单链 反转 输出 
2008-09-15 23:39
qGemini
Rank: 1
等 级:禁止访问
帖 子:100
专家分:0
注 册:2008-6-28
收藏
得分:0 
你要是看得懂反转的代码的话,你还怕不懂写输出吗??

Gemini  C/C++群57751397
本人不对自己的言论负责

http://
2008-09-16 00:21
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1687
专家分:4253
注 册:2007-12-27
收藏
得分:0 
这样的代码是用来反转整个链表的,如果你要使用它,
那么你应该做的不是修改它,而是调用它之后再正常输出整个链表(反转后的)。

如果你不想真的反转整个表,只是想逆向输出一下,那应该这样:
程序代码:
void revout(Node *head)
{
  if(head!=NULL){
    revout(head->next);
    printf("%d\n",head->data);
  }
}


当然了,printf那里需要按照你自己的内容修改。

[[it] 本帖最后由 forever74 于 2008-9-16 00:38 编辑 [/it]]
2008-09-16 00:36
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
闲得无聊打了点儿码……LZ凑合着看…………

程序代码:
#include <stdio.h>

typedef struct Node
{
    int data;
    struct Node* next;
} Node;

/* 反转链表,原理:将原链表表头元素

 * 依次插入一个新链表的头部,从而达成

 * 反转链表的目的。

 */
Node* Reversal(Node* head)
{
    Node *p = NULL;
    while (head != NULL)
    {
        /* 保存head后面的链,因为马上就会被写掉 */
        Node *tmp = head->next;
        /* 下面两行实际上讲head插入链表p的头部中 */
        head->next = p;
        p = head;
        /* 恢复head的值,使head指向下一元素 */
        head = tmp;
    }
    /* 这时,p的内容即为反转后的链表,head应该为NULL */
    return p;
}
/* 反转打印链表 */
void print(Node *p)
{
    if (p->next != NULL)
        print(p->next);
    printf("%d ", p->data);
}

int main()
{
    int i;
    Node n[5];
    for (i = 0; i < 5; i++)
    {
        n[i].data = i + 1;
        n[i].next = n + n[i].data;
    }
    n[4].next = NULL;
    /* 反转链表后反转打印,所以打印的是正向的值 */
    print(Reversal(n));
    return 0;
}


专心编程………
飞燕算法初级群:3996098
我的Blog
2008-09-16 08:37
快速回复:单链表反转输出问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018981 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved