august 发表于 2007-8-21 11:15:43

C链表里的倒序排列

问结点数据域依次为 a1,a2.........,an的一个单链表所有结点逆置,即第一个结点数据域变为 an
最后一个结点数据域变为 a1?
这个应该怎么做呢?

FantasyDR 发表于 2007-8-21 23:36:53

最简单的方法,开临时的指针储存需要保持的数据,然后从头到尾遍历一遍。


// 节点定义如下(伪码,不一定对哦-_-b)
struct node
{
   int value; //这里储存数据,第一个节点数据就是a1,依次类推……
   node* next; //这里是下一个节点的地址,如果是0表示链表结束了。
};

// 函数接受传入的头节点地址,返回新的头节点地址

node* Reverse(node* pFirst)
{
node* pCur = pFirst;
node* pNext = 0;
node* pLast = 0;

while(pCur)
{
pNext = pCur->next;
pCur->next = pLast;
pLast = pCur;
pCur = pNext;
}

return pCur;
}

john_he 发表于 2007-8-21 23:50:37

如果是双头的话,next和prev指针的值交换就OK……

FantasyDR 发表于 2007-8-23 00:52:22

引用第0楼august于2007-08-21 11:15发表的 C链表里的倒序排列 :
问结点数据域依次为 a1,a2.........,an的一个单链表所有结点逆置,即第一个结点数据域变为 an
最后一个结点数据域变为 a1?
这个应该怎么做呢?

ls啊,如果是双向链表,这问题还有什么意义……\\(-____-)/

john_he 发表于 2007-8-23 01:49:51


其实我的意思是:为什么不做成双头的。

各位WS我吧……

shawind 发表于 2007-8-23 09:45:08

这不就是循环链表么?

ps.怪事了.FantasyDR怎么引用lz的发言,却对ls的说话.

FantasyDR 发表于 2007-8-23 21:57:06

我把“单链表”三个字加颜色了:)

coolpay64 发表于 2007-8-23 22:43:36

循环链表惷最後項會指向第一項
雙向link list指移動時可住前一項/下一項
页: [1]
查看完整版本: C链表里的倒序排列