双链表(三)

双链表的插入排序

双链表的插入排序和单链表的方法一样,唯一不同的是双链表多了一个指向前一个节点的指针,在交换数据的时候需要多交换一点东西

前面分享的单链表的插入排序,方法如下:

1.将一个完整的链表分成两部分,一部分是有序的,也就是只含头节点和一个数据节点,另一部分为无序的。

2.将无序的部分一个节点一个节点按照从小到大的规则,插入到有序的部分,直到最后一个节点。

代码如下:

void node_px(node* head)
{
    node *p;   //p指针用来指向有序的节点,并依次访问
    node *q,*q1;  //q指针指向无序的节点,q1指针指向q指向的后面一个指针
    q = head->next->next;//q指向第二个数据节点
    head->next->next = NULL;//断开第二个数据节点
    q->pre = NULL;  
    while (q != NULL)
    {
        q1 = q->next;
        p = head;
        while (p->next!=NULL&&p->next->a< q->a)
            p = p->next;
        if (p->next != NULL)
            p->next->pre = q;
        q->next = p->next;
        p->next = q;
        q->pre = p;
        q = q1;
    }
}

猜你喜欢

转载自www.cnblogs.com/hzb1224/p/11413034.html