我估计楼主是写链表排序被各种指针操作绕迷糊了。提供一个清晰的思路:反向冒泡,步骤如下:1。从链表头开始操作,将第一个元素和后面的比较,将大者换到后面去。反复操作直至链表尾。2。链表尾提前一位(因为最后一个元素已经是最大值,无需再处理了)3。重复1,2步 ,直至链表尾等于链表头,既表明处理结束struct Node
{
int value;
Node* next;
};void Sort(Node* head)
{
Node* tail = NULL; while(tail != head->next)
{
Node* pre = head;
Node* cur = pre->next;
while(cur != tail && cur->next != tail)
{
if( cur->value > cur->next->value )
{
//交换当前节点和后一个节点
pre->next = cur->next;
cur->next = cur->next->next;
pre->next->next = cur;
}
pre = pre->next;
cur = pre->next;
} tail = cur;
}
}void main()
{
Node* head = new Node();
Node* cur = head; //使用带表头的链表
int n = 10;
//初始化链表数据
for( int i = n; i >0; i-- )
{
Node* node = new Node();
node->value = i;
cur->next = node;
cur = node;
} //排序 Sort(head);
}
你先把冒泡排序弄出来,这是必须的 冒泡排序弄成子函数 在你输入数之后,在用一个函数判断你的getchar()内容是y还是n,之后条件跳转到冒泡还是直接输出结果
经典排序之冒泡排序
单链表就是线性表哈!你要学习线性表就要学会对链表的灵活运用!不如你看看我这个代码!?你看看能看懂不~?