1.代码一
1:功能:对于含有n个结点的单链表L1,将L1拆分成两个不带头结点的单链表L1,L2,其中L1含有原来的前n/2个结点,L2含有余下的结点
void fun1(LinkNode *&L1,LinkNode * &L2)//① { int n=0,i;//② LinkNode *p=L1;//③ while(p!=NULL)//④ { n++;//⑤ p=p->next;//⑥使p中的结点都移向下一个结点 } p=L1;//⑦ for(i=1;i<n/2;i++)//⑧ p=p->next;//⑨ L2=p->next;//⑩ p->next=NULL;//? }
2.第八到十行:对结点如何进行拆分的语法看不太懂
2,代码二
1.功能:存在3个带头结点的单链表LA,LB,LC的结点均依元素值递增排列,此算法使操作后的链表LA中仅剩下3个表中均包含的数据元素结点,且没有数据值相同的结点,并释放LA中所有的无用结点。
void Commonode(LinkNode * &LA,LinkNode * &LB,LinkNode *LC)//① {
LinkNode *pa=LA->next,*pb=LB->next,*pc=LC->next,*q,*r;//②
LA->next=NULL;//③此时是LA作为新建单链表的头结点
r=LA;//④r始终指向新单链表的尾结点
while(pa!=NULL)//⑤查找均包含的公共结点并建立新链表
{
while(pb!=NULL&&pa->data>pb->data)//⑥将pa中结点与LB中的pb结点进行比较
pb=pb->next;//⑦
while(pc!=NULL&&pa->data>pc->data)//⑧将pa结点与LC中的pc结点进行比较
pc=pc->next;//⑨
if(pb!=NULL&&pc!=NULL&7pa->data==pb->data&&pa->data==pc->data)//⑩若pa是公共结点
{
r->next=pa;//?将pa结点插入到LA中
r=pa;//?
pa=pa->next;//?
}
else//?
{q=pa;//?
pa=pa->next;//?
free(q);//?
}
}
r->next=NULL//?尾结点的next域置空
}
2.第六到九行:分别将pa结点与LB,LC中pb,pc进行比较后的操作和语法不太明白结点是怎么变换和操作的
第14到第17行,对删除的操作语法不太懂
3.自己理解:先以单链表LA的头结点作为一个空表,r指向这个新建单链表的尾结点。以pa扫描单链表LA的数据结点,判断它是否在单链表LB和LC中,若同时在LB和LC中,表示pa所指结点是公共元素,则将其链接到r所指结点之后,否则删除之。
原文:https://www.cnblogs.com/LHerr/p/10596452.html