链表冒泡程序改错
前段日子在论坛看到的题目 不改变链表的 VALUE值 冒泡链表
自己写了个但是执行起来有问题
写了defListNode* swaplist(defListNode* pre, defListNode* curr, defListNode* next)函数
交换链表头两链表CURR NEXT 时, PRE为NULL
第一修正该程序或者指出错误顺利执行给全分 谢谢
#include <cstdlib>
#include <iostream>
using namespace std;
class defListNode
{
public:
int value() { return _value; }
defListNode *pNext;
defListNode(int value,defListNode *Next=NULL):_value(value),pNext(Next)
{}
private:
int _value;
};
void printlist(defListNode* list)
{
int output;
while(list!=NULL)
{
output=list->value();
cout<<output<<" ";
list=list->pNext;
}
}
defListNode* swaplist(defListNode* pre, defListNode* curr, defListNode* next)
{
if(pre==NULL)
{
curr->pNext =next->pNext;//交换数据链开头两数据的情况 PRE为NULL;
next->pNext =curr;//
return next;//返回链表首指针
}
else//则为交换链表非开始两数据(curr next)的情况
{
pre->pNext =next;
curr->pNext =next->pNext;
next->pNext =curr;
return pre;//返回PRE
}
}
defListNode* SortList(defListNode *pHead)
{
bool swapsign;//链表是否进行了交换的标志
defListNode *temppre, *temp,*tempnext, *listbegin, *firstofthree;
temp=pHead;
tempnext=pHead->pNext;
do
{
swapsign=false;
if(temp->value()>tempnext->value())//如果链表开头两数据需要交换? 进行: 跳过
{
listbegin=swaplist(NULL,temp,tempnext);
swapsign=true;//交换后标志为真
}
else
{
listbegin=temp; //不需要交换 表头无变化 地址给予listbegin 指针
}
temp=listbegin->pNext;
tempnext=temp->pNext;
temppre=listbegin;
while(tempnext!=NULL)
{
if(temp->value()>tempnext->value())
{
firstofthree=swaplist(temppre,temp,tempnext);//交换TEMP TEMPNEXT位置 返回TEMPPRE地址
swapsign=true;
}
printlist(listbegin);
cout<<endl;
temppre=temppre->pNext;
temp=temppre->pNext;//
tempnext=temp->pNext;//
printlist(listbegin);
cout<<endl;
}
} while(swapsign==true);
return listbegin;
}
int main(int argc, char *argv[])
{
defListNode* ls1=new defListNode(1);
defListNode* ls9=new defListNode(9,ls1);
defListNode* ls6=new defListNode(6,ls9);
defListNode* ls4=new defListNode(4,ls6);
defListNode* ls2=new defListNode(2,ls4);
defListNode* ls7=new defListNode(7,ls2);
defListNode* ls5=new defListNode(5,ls7);
defListNode* ls3=new defListNode(3,ls5);
defListNode* ls8=new defListNode(8,ls3);
defListNode* ls0=new defListNode(0,ls8);//建造数据链0 8 3 5 7 2 4 6 9 1
printlist(ls0);
cout<<endl<<endl;
defListNode* node=SortList(ls0);
printlist(node);
system("PAUSE");
return EXIT_SUCCESS;
}