| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1881 人关注过本帖
标题:链表逆序问题
只看楼主 加入收藏
飞天大烧卖
Rank: 2
等 级:论坛游民
帖 子:45
专家分:27
注 册:2020-3-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
链表逆序问题
给定一个单向链表
typedef struct list
{
    int m_data;
    struct list* m_next;
}Link;
写一个函数逆序输出链表;
我的想法比较笨,先遍历一遍链表,把链表里的数存到数组里,在逆向输出数组里的数。
用堆栈怎么处理?用递归又怎么处理?
搜索更多相关主题的帖子: 数组 逆序 链表 输出 list 
2020-04-15 22:31
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:5 
if 空节点 return;
递归 节点->next
输出 节点

完事

https://zh.
2020-04-15 23:03
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:5 
单向链表的倒序?那只要交换相邻两个节点的 m_next 就行了。
2020-04-15 23:08
forever74
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:CC
等 级:版主
威 望:58
帖 子:1685
专家分:4252
注 册:2007-12-27
收藏
得分:5 
显式用栈没啥意思啊,
其实把楼主你的数组从后往前用,再从前往后读,就算是用栈了。
递归也是后台用栈的。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-04-15 23:25
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
递归的话,链表长则容易爆栈。

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

typedef struct node_ {
    int data;
    struct node_* next;
} node;

void list_print( const node* head )
{
    for( ; head; head=head->next )
        printf( "%d%c", head->data, " \n"[head->next==NULL] );
}

node* list_reverse( node* head )
{
    node* pre = NULL;
    for( ; head; )
    {
        node* tmp = head->next;
        head->next = pre;
        pre = head;
        head = tmp;
    }
    return pre;
}

int main( void )
{
    node a[3] = { {0,a+1}, {1,a+2}, {2,NULL} };
   

    node* head = &a[0];
    list_print( head );
   

    head = list_reverse( head );
    list_print( head );
}

2020-04-15 23:29
fulltimelink
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:171
专家分:752
注 册:2020-4-1
收藏
得分:5 
int,量大可以用位数组。输出时反向处理
_______________
此方式不行,位数组没顺序记录
--------------------------------
刚才大致画了下,可以使用时间换空间的方式:异或
循环期间记录3个值 :
起始值 A
结尾值 B
所有值的异或结果值 C

4   3   6   7   9
  a   b   c   d
    e   f   g
      h   i
         j
a为4和3的异或值 , b为3和6的异或值
当元素个数为奇数时,比如j  ,他的结果就是 4^9
当元素个数为偶数时,比如i, 他的结果就是上层根元素的异或值 也就是  3^6^7^9,
也就是最下面顶点,在元素个数为奇数时为  其值为第一个元素和最后一个元素的异或值, 为偶数时,其值为所有对应根上层元素的异或值

那么通过A  B  C即可计算出  d   c   b   a , 然后结合B 进行异或运算即可倒序计算出   7  6   3 输出即可

todo:代码实现




[此贴子已经被作者于2020-4-16 10:55编辑过]

2020-04-16 06:18
快速回复:链表逆序问题
数据加载中...
 
   



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

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