尝试找出两段自己不懂得的基础代码以Markdown形式发表一篇博客。格式如下:
1. 代码段1简介:代码功能:把单链表L分成两个单链表L1和L2。
1.1. 代码1
void split(LinkNode *&L,LinkNode *&L!,LinkNode *&L2) //1
{
LinkNode *p=L->next,*q,*r1; //2
L1=L; //3
r1=L1; //4
L2=(LinkNode *)malloc(sizeof(LInkNode)) //5
L2->next=NULL; //6
while(p!=NULL) //7
{
r1->next=p; //8
r1=p; //9
p=p->next;
q=p->next; //10
p->next=L2->next; //11
L2->next=p; //12
p=q; //13
}
r1->next=NULL; //14
}
2. 不懂得地方
从//3到//9不懂,是功能不懂。代码应该是先将L1指向L的头节点,r1指向L1的尾节点(不知道为什么r1会指向L1的尾节点),为L2申请空间,使L2的下一个节点为空,但p不为空时,使p指向r1的下一个节点,为什么又要使p指向r1.
2. 代码段1简介:代码功能:运用双链表中实现元素递增顺序。
2.1 代码1
void sort(DLinkNode *&L) //1
{
DLinkNode *p,*pre,*q; //2
p=L->next->next; //3
L->next->next=NULL; //4
while(p!=NULL); //5
q=p->next; //6
pre=L; //7
while(pre->next!=NULL&&pre->next->data<p->data); //8
pre=pre->next; //9
p->next=pre->next; //10
if(pre->next!=NULL) //11
pre->next->prior=p; //12
pre->next=p; //13
p->prior=pre; //14
p=q; //15
}
2.2 自己不懂得地方
不懂//8,pre->next->data和p->data是指向L的同一个位置里的数据,怎么比较大小。