//删除单链表中最大的值 时间复杂度O(n) void delmaxnode(LinkedList *&L){ LinkedList *pre = L,*p = L->next,*maxpre = pre,*maxp = p; while(p!=NULL) { if(maxp->data<p->data){ maxp = p; maxpre = pre; } pre = p; p = p->next; } maxpre->next = maxp->next; free(maxp); } //单链表排序 时间复杂度O(n^2) //将链表分为有序区和无序区 void sort(LinkedList *&L){ LinkedList *pre,*p,*q; p = L->next->next; L->next->next = NULL; //一开始有序区只有一个结点 while(p!=NULL){ q = p->next; pre = L; //将p结点插入有序区 while(pre->next!=NULL&&pre->next->data<p->data){ pre = pre->next; } p->next = pre->next; pre->next = p; p = q; } } //将单链表倒转过来 头插法建表的办法 void reverse(LinkedList *&L){ LinkedList *p = L->next; L->next = NULL; while(p!=NULL){ q = p->next; p->next = L->next; L->next = p; p = q; } } // 将链表分成两个链表 a1->b1->a2->b2 // a1->a2->a3 b(n)->b(n-1)->b(n-2) // L1采用尾插法建表,L2采用头插法建表 void split(LinkedList *&L,LinkedList *&L1,LinkedList *&L2){ LinkedList *p = L->next,*q,*r1; L1 = L; r1 = L1; L2 = (LinkedList*)malloc(sizeof(LinkedList)); L2->next = NULL; while(p!=NULL){ r1->next = p; r1 = p; p = p->next; q = p->next; p->next = L2->next; L2->next = p; p = q; } r1->next = NULL; }