尝试找出两段自己不懂得的基础代码以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的同一个位置里的数据,怎么比较大小。