首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

单链表倒着输出如何写?敢求天上高人帮忙小弟写上

2012-08-09 
单链表倒着输出怎么写?敢求天下高人帮忙小弟写下单链表倒着输出怎么写?敢求天下高人帮忙小弟写下如:1 3 5

单链表倒着输出怎么写?敢求天下高人帮忙小弟写下
单链表倒着输出怎么写?敢求天下高人帮忙小弟写下
如:1 3 5 7 9
输出:9 7 5 3 1

[解决办法]

C/C++ code
void reverse_print(LNode* head){    if(NULL == head) return;    reverse_print(head->next);    print(head->data);}
[解决办法]
Node* reverse(Node * node)
{
Node * p1 = NULL;
Node * p2 = node;
Node * p3 = node->next;
while(p3)
{
p2->next = p1;
p1 = p2;
p2 = p3;
p3 = p3->next;
}
p2->next = p1;
return p2;
}
[解决办法]
void Reverse(tNODE **pHead)
{
tNODE *pTemp1, *pTemp2, *pTail = NULL;

if(*pHead == NULL || (*pHead)->pNext == NULL)//没有节点或只有一个节点
return ;
pTemp1 = *pHead;
pTemp2 = *pHead;

while(pTemp1 != NULL)
{
pTemp2 = pTemp1;
pTemp1 = pTemp1->pNext;
pTemp2->pNext = pTail;
pTail = pTemp2;
}

*pHead = pTail;

return ;
}
[解决办法]
一楼递归漂亮。
 或者可以写个使链表反序函数
 void Turn_list( Linklist &L)
{
Linklist p=NULL,q=NULL;
p = (L->next)->next; //p为第二个结点
q = p->next; //q为第三个结点
L->next->next = NULL;
while( q )
{
p->next = L->next;
L->next = p;
p = q;
q = p->next;
}
p->next = L->next;
L->next = p;
}
[解决办法]
探讨
比较好的方法, 先链表反向, 再输出, 再链表反向
递归由于要消耗栈, 当链表太长时(如1千万, 或1亿), 会发生栈溢出, 从而导致程序崩溃

对于liao05050075说的"要么开一个数组,从头读到尾,边读边存,最后倒着输就是了", 不提倡
原因如下:  首先开数组前要知道元素个数, 也就是链表的长度, 求链表长度时就要对链表扫一遍
向数组中写元素也要扫一遍链表
输出也要扫一遍数组
同样的时间开销, 确比先反再输再反的方案多…

[解决办法]
先反再输出再反的方案, 是在原链表上直接反向, 空间开销为O(1)

而开数组的空间开销为O(n)
O(n)的空间开销, 但对时间开销没有质的改善

综合时间和空间开销, 提倡先反再输出再反的方案




[解决办法]
学习了..
[解决办法]
一楼的最简洁,赞一个,学到了。以前都是另建一个把链表给reverse了然后输出。

热点排行