链表冒泡程序改错
前段日子在论坛看到的题目 不改变链表的 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;
}
自己写了个但是执行起来有问题
写了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;
}
...全文
相关推荐
改错题汇总.rar
改错题汇总.rar
最新真正二级C语言机试300题(含填空、改错、编程)并含解析及答案
最新最权威的二级C语言机试真题100套,会了这100套,不信你过不了二级机试!!!更重的是含解析和答案。最好的是它是:word格式。不会让你白花10个积分!!! 如果打不开,请加QQ50629339咨询!
全国计算机二级c语言程序改错题100全中必过.doc
全国计算机二级c语言程序改错题100全中必过.doc
全国计算机等级考试二级C语言上级题库
全国计算机等级考试二级C语言上级题库 包括填空题 改错题和编程题 均有答案
浙江省二级C语言上机考试题库PDF实战:题型拆解与代码模板
C语言作为计算机等级考试与编程入门的核心科目,上机考试与笔试最大的不同在于每道题都对接真实编译器,判分以编译结果和测试用例为准。理解这一原理后,备考便不再依赖死记硬背,而是掌握高频考点与代码套路。将题库PDF按程序填空、程序改错、程序设计三类题型拆解,聚焦数组、指针、文件读写等常考模块,配合本地编译环境与自动判题脚本,即可把静态的题目集转化为可重复训练的刷题资源。这种训练方式不仅适用于浙江省二级C语言上机考试,也适用于其他等级考试或课程实训。通过限时套题、记录错因、合卷默写等技巧,考生能在短时间内吃透题库模


