#include <stdio.h> #include <malloc.h> #include "linklist.h" void split(LinkList *&L,LinkList *&L1,LinkList *&L2) { LinkList *p=L->next,*q,*r1; //p指向第1个数据节点 L1=L; //L1利用原来L的头节点 r1=L1; //r1始终指向L1的尾节点 L2=(LinkList *)malloc(sizeof(LinkList)); //创建L2的头节点 L2->next=NULL; //置L2的指针域为NULL while (p!=NULL) { r1->next=p; //采用尾插法将*p(data值为ai)插入L1中 r1=p; p=p->next; //p移向下一个节点(data值为bi) q=p->next; //由于头插法修改p的next域,故用q保存*p的后继节点 p->next=L2->next; //采用头插法将*p插入L2中 L2->next=p; p=q; //p重新指向ai+1的节点 } r1->next=NULL; //尾节点next置空 } int main() { LinkList *L,*L1,*L2; int i; ElemType a[]= {1,2,3,4,5,6,7,8,9,10}; InitList(L); InitList(L1); InitList(L2); for(i=9; i>=0; i--) ListInsert(L, 1, a[i]); printf("L:"); DispList(L); printf("L->L1,L2\n"); split(L,L1,L2); printf("L1:"); DispList(L1); printf("L2:"); DispList(L2); DestroyList(L1); DestroyList(L2); return 0; }1 例:删除元素最大的节点(linklist.h是单链表“算法库”中的头文件,详情单击链接…) #include <stdio.h> #include <malloc.h> #include "linklist.h" void delmaxnode(LinkList *&L) { LinkList *p=L->next,*pre=L,*maxp=p,*maxpre=pre; while (p!=NULL) //用p扫描整个单链表,pre始终指向其前驱节点 { if (maxp->data<p->data) //若找到一个更大的节点 { maxp=p; //更改maxp maxpre=pre; //更改maxpre } pre=p; //p、pre同步后移一个节点 p=p->next; } maxpre->next=maxp->next; //删除*maxp节点 free(maxp); //释放*maxp节点 } int main() { LinkList *L; int i; ElemType a[]= {1,3,2,9,0,4,7,6,5,8}; InitList(L); for(i=9; i>=0; i--) ListInsert(L, 1, a[i]); printf("L:"); DispList(L); printf("删除最大值节点\n"); delmaxnode(L); printf("L:"); DispList(L); DestroyList(L); return 0; }1 例:增序排列节点(linklist.h是单链表“算法库”中的头文件,详情单击链接…) #include <stdio.h> #include <malloc.h> #include "linklist.h" void sort(LinkList *&L) { LinkList *p,*pre,*q; p=L->next->next; //p指向L的第2个数据节点 L->next->next=NULL; //构造只含一个数据节点的有序表 while (p!=NULL) { q=p->next; //q保存*p节点后继节点的指针 pre=L; //从有序表开头进行比较,pre指向插入*p的前驱节点 while (pre->next!=NULL && pre->next->data<p->data) pre=pre->next; //在有序表中找插入*p的前驱节点*pre p->next=pre->next; //将*pre之后插入*p pre->next=p; p=q; //扫描原单链表余下的节点 } } int main() { LinkList *L; int i; ElemType a[]= {1,3,2,9,0,4,7,6,5,8}; InitList(L); for(i=9; i>=0; i--) ListInsert(L, 1, a[i]); printf("L:"); DispList(L); printf("排序\n"); sort(L); printf("L:"); DispList(L); DestroyList(L); return 0; }