您的位置:首页 > 其它

带头结点的链表 排序

2014-09-17 16:25 169 查看
typedef struct link

{

int data;

struct link *next;

}Node,*pNode

void link_sort(pNode head)
//带头结点的链表
head头指针 pNode 为 链表结点 指针类型

{

pNode pre,p,temp; //
p保存当前要插入的结点,pre插入位置的前驱结点

p=head->next;
// temp保存p(插入结点) 的后一个结点

if(p!=NULL)

{

temp=p->next;

p->next=NULL;
// 考虑当链表为空的情况,若为空p->next已经为空

p=temp;

}

while(p) //当只要一个结点时 p已经等于NULL
,不空则从第2个结点开始插入并排序

{

pre=head;

while( (pre->next)&&
(pre->next->datadata) )
//while判断里的前后顺序不能变

pre=pre->next;
//当pre指想最后一个结点时结束 ; 这里pre为找待插入位置的前驱结点

//
如果换了while里的顺序会导致pre->next->data读取错误

temp=p->next;
//temp保存插入结点后面一个结点

p->next=pre->next;
//插入结点

pre->next=p;

p=temp;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: