怎么说呢,思路很简单很简单,先把头结点拆出来,后边的结点继续遍历,向头结点中插入,只不过插入的时候有了一点条件而已(需要有序),但是!!感觉一点也不简单呢,指针一直变,还是有点混乱的。
慢慢熟悉一下加入循环嵌套的这种遍历怎么写,毕竟这个比较基础,大不了,背下来吗~~哈哈。
不说了,上代码:
#include<iostream>
using namespace std;
//----------------------此处生成一个链表,过程可以直接跳过------------
//结点结构
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *Linklist;
//带头结点单链表的创建
LNode* create(int Array[]){
LNode *p, *pre, *head;
head = new LNode;
head->data = NULL;
pre = head;
for (int i = 0; i < 5; i++){
p = new LNode;
p->data = Array[i];//链表的data域直接用数组的值传, 不直接输入了
p->next = NULL;
pre->next = p;
pre = p;
}
return head;
}
//-----------------------------------------------------------------
//使其元素递增有序
void Sort(Linklist &L){//此处是引用,也就是直接操作单链表
LNode *p = L->next, *pre;
LNode *r = p->next;
p->next = NULL;
p = r;
while (p!=NULL){
r = p->next;
pre = L;
while (pre->next!=NULL&&pre->next->data<p->data){
pre = pre->next;
}
p->next = pre->next;
pre->next = p;
p = r;
}
}
int main(){
int Array01[5] = { 11, 3, 35, 7, 29 };
LNode* L01 = create(Array01);
Sort(L01);
while (L01->next != NULL){
cout << L01->next->data<<endl;
L01 = L01->next;
}
cout << endl;
return 0;
}