C链表里的倒序排列
问结点数据域依次为 a1,a2.........,an的一个单链表所有结点逆置,即第一个结点数据域变为 an最后一个结点数据域变为 a1?
这个应该怎么做呢? 最简单的方法,开临时的指针储存需要保持的数据,然后从头到尾遍历一遍。
// 节点定义如下(伪码,不一定对哦-_-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;
}
如果是双头的话,next和prev指针的值交换就OK…… 引用第0楼august于2007-08-21 11:15发表的 C链表里的倒序排列 :
问结点数据域依次为 a1,a2.........,an的一个单链表所有结点逆置,即第一个结点数据域变为 an
最后一个结点数据域变为 a1?
这个应该怎么做呢?
ls啊,如果是双向链表,这问题还有什么意义……\\(-____-)/
其实我的意思是:为什么不做成双头的。
各位WS我吧…… 这不就是循环链表么?
ps.怪事了.FantasyDR怎么引用lz的发言,却对ls的说话. 我把“单链表”三个字加颜色了:) 循环链表惷最後項會指向第一項
雙向link list指移動時可住前一項/下一項
页:
[1]