c++ list 的合并及排序
c++ list 合并是将两个链表合并成一个,并且将其有序排列起来。思路相当简单,将两个链表连接起来,然后将这个链表排序就好了。
主要的是链表的排序:
主要的是链表的排序:
<span style="color:#333333;">void sort_list(node* &head,int n)//思路:;类似于选择排序的方法,先找到链表中最大的节点,记录下这个节点及其前一个节点,然后再交换。
{
node *p,*p1,*p2,*pmin,*pfront,*p3;
int count1=0;
p=head;
while(p!=NULL)
{
pmin=p2=p;
p1=p->next;
while(p1!=NULL)
{
if(pmin->num<p1->num)
{
pfront=p2;
pmin=p1;
}
p1=p1->next;
p2=p2->next;
}
if(count1==0)//判断是否是第一个节点,如果是第一个则赋值头结点。
{
if(pmin == head)//判断最大的
{
p3 = head;
p = p->next;
pfront = head;
}
else
{
pfront->next=pmin->next;//把这个最大的链表从原链表上摘下来。
p2=head;
head=pmin;
head->next = p2;
p3=head;
p=head->next;
pfront = head;
}
}
else
{
if(count1==n-1)//判断是否剩下最后一个。
{
break;
}
if(pmin==p)//判断是否是在第一个未排序的节点
{
p3 = p3->next;
p = p->next;
pfront = p3;
}
else
{
pfront->next = pmin->next;
p2=p3->next;
p3->next=pmin;
p=p2;
p3=pmin;
p3->next = p;
pfront = p3;
}
}
count1++;
}
}</span>
╮(╯▽╰)╭可能有点乱,指针这个东西还是需要再练的,弱爆了。