#include<iostream>
using namespace std;
struct node {
int data;
struct node *next;
};
void createList(node* pHead){
node*p = pHead;
for(int i =1; i <10; ++i){
node* pNewNode = new node;
pNewNode -> data = i;
pNewNode -> next = NULL;
p -> next = pNewNode;
p = pNewNode;
}
}
int display_length(node *head){
int n = 0;
node *p = head;
while(p != NULL){
cout<<p->data<<"->";
p = p->next;
n++;
}
return n;
}
//链表、长度
node *insert(node *head, int num){
node *p0, *p1, *p2;
p1 = head; //原链表
p2 = new node; //插入前一段
p0 = new node; // 插入节点 新结点
p0->data = num;// 插入数据
while(p1->next != NULL && p1->data < p0->data){ //当结点数据小于 待插入数据 赋值给p2
p2 = p1;
p1 = p1 -> next;
}
if(p0->data <= p1->data){ //待插入结点数据 剩余结点数据
if(p1 == head){ // 头部前段插入 p0和p1位置: p0->p1->...
head = p0;
p0->next = p1;
}else{ // 插入中间节点 p0,p1和p2位置: p2-> p0 -> p1
p2->next = p0;
p0->next = p1;
}
}else{ // 尾部插入节点 p0,p1和p2位置: p2->p1->p0->NULL
p1->next = p0;
p0->next = NULL;
}
return head;
}
int main(){
node *head = new node;
head -> data = 0;
head -> next = NULL; //为head分配内存,初始化类成员
createList(head); //填充
int n = display_length(head); //遍历
printf("\n%d\n", n);
int data = 8;
node *result = insert(head, data);
int m = display_length(result); //遍历
printf("\n%d\n", m);
}