我一直在想如何顛倒雙向鏈表的順序,但由於某種原因,在我的函數void reverse()
運行while循環一次,然後由於某種原因崩潰。爲了回答一些問題,我在兄弟們的幫助下自我教導自己。這還不是全部的代碼,但我有一個display()
功能,按時間順序打印所有節點從start_ptr
和激活像C++中的反向雙鏈表
case 1 : add_end(); break;
case 2 : add_begin(); break;
case 3 : add_index(); break;
case 4 : del_end(); break;
case 5 : del_begin(); break;
case 6 : reverse(); break;
某些功能的開關這是我的代碼的感性:
#include <iostream>
using namespace std;
struct node
{
char name[20];
char profession[20];
int age;
node *nxt;
node *prv;
};
node *start_ptr = NULL;
void pswap (node *pa, node *pb)
{
node temp = *pa;
*pa = *pb;
*pb = temp;
return;
}
void reverse()
{
if(start_ptr==NULL)
{
cout << "Can't do anything" << endl;
}
else if(start_ptr->nxt==NULL)
{
return;
}
else
{
node *current = start_ptr;
node *nextone = start_ptr;
nextone=nextone->nxt->nxt;
current=current->nxt;
start_ptr->prv=start_ptr->nxt;
start_ptr->nxt=NULL;
//nextone=nextone->nxt;
while(nextone->nxt!= NULL)
{
pswap(current->nxt, current->prv);
current=nextone;
nextone=nextone->nxt;
}
start_ptr=nextone;
}
}
您正在交換節點的內容而不僅僅是節點p ointers。你確定要這麼做嗎? – 2010-07-07 20:43:12
在相關說明中,您可以從不同的角度來看待事物。而不是顛倒雙鏈表本身的內容,而是可以專注於反向列表中的內容,這應該是直接的,因爲列表是雙向鏈接的。例如,爲您的列表實現STL樣式的雙向迭代器。它們可以與'std :: reverse_iterator <>'適配器一起使用(對於'rbegin()'和'rend()')。一旦實現了這些方法,使用STL算法就會很簡單,包括'std :: reverse()'。這是一個有趣的練習,海事組織。 – Void 2010-07-07 23:42:51