双链表的插入排序
双链表的插入排序和单链表的方法一样,唯一不同的是双链表多了一个指向前一个节点的指针,在交换数据的时候需要多交换一点东西
前面分享的单链表的插入排序,方法如下:
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; } }