链表的相关算法及应用
Posted hekuiflye
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表的相关算法及应用相关的知识,希望对你有一定的参考价值。
问题六 :将两个单链表的相同的值,组成一个新的链表
问题七 :递增输出单链表 并释放节点
问题八 :将一个带头结点的单链表A 分解为两个带头结点的单链表A和B使A中保存原来序号为奇数的元素,B中保存原来序号为偶数的元素
问题九 :将C={a1,b1,a2,b2,...,an,bn},拆分为 A={a1,a2,...,an} B={b1,b2,...,bn};
问题十 :去除递增有序链表中的重复元素
//问题六 将两个单链表的相同的值,组成一个新的链表 LinkList common(LinkList L1,LinkList L2){ LNode *t1=L1->next,*t2=L2->next; bool yes = 0; LNode *h = (LNode*)malloc(sizeof(LNode)); h->next=NULL; while(t1){ yes=0; t2=L2->next; while(t2){ if(t1->data==t2->data){ yes=1; break; } t2=t2->next; } if(yes){ LNode *node = (LNode*)malloc(sizeof(LNode)); node->data=t1->data; node->next=h->next; h->next = node; } t1=t1->next; } return h; }
//问题七 递增输出单链表 并释放节点 void min_del(LinkList &L){ LNode *pre=L,*p=L->next,*t; while(L->next!=NULL){ pre=L; p=L->next; while(p->next!=NULL){ if(p->next->data<pre->next->data){ pre=p; } p=p->next; } t=pre->next; printf("%d ",t->data); pre->next=t->next; free(t); } free(L); }
//问题八 将一个带头结点的单链表A 分解为两个带头结点的单链表A和B // 使A中保存原来序号为奇数的元素,B中保存原来序号为偶数的元素 LinkList disCreate(LinkList &A){ LinkList B = (LinkList)malloc(sizeof(LNode)); B->next=NULL; LNode *a=A,*b=B; LNode *r,*p=A->next; int index = 1; while(p!=NULL){ if(index%2){ a->next=p; a=p; }else{ b->next=p; b=p; } index++; p=p->next; } a->next=NULL; b->next=NULL; return B; }
//问题九 将C={a1,b1,a2,b2,...,an,bn},拆分为 A={a1,a2,...,an} B={b1,b2,...,bn}; LinkList disCreate2(LinkList &A){ LinkList B = (LinkList)malloc(sizeof(LNode)); B->next=NULL; LNode *r,*a=A; int index = 1; LNode *p = A->next; while(p!=NULL){ r=p->next; if(index%2){ a->next=p; a=p; }else{ p->next=B->next; B->next=p; } p=r; index++; } a->next=NULL; return B; }
//问题十 去除递增有序链表中的重复元素 void moveRepeat(LinkList &L){ LNode *pre=L,*p=L->next; while(p!=NULL){ if(p->next!=NULL){ if(p->data!=p->next->data){ pre->next=p; pre=p; } }else{ pre->next=p; pre=p; } p=p->next; } pre->next=NULL; }
以上是关于链表的相关算法及应用的主要内容,如果未能解决你的问题,请参考以下文章