一个带头结点的单链表拆分成两个带头结点的单链表L1和L2
题目:有一个带头结点的单链表L=(a1,b1,a2,b2,....an,bn),设计一个算法将其拆分成两个带头结点的单链表L1和L2,其中L1=(a1,a2,...an),L2=(bn,bn-1,...b1),要求L1使用L的头结点。(PS:题目上的数字和n、n-1指下标)
程序代码:
void split(LinkNode *&L,LinkNode *&L1,LinkNode *&L2)
{ LinkNode * p=L->next,* q,* r1;
L1=L;
r1=L1; //r1始终指向L1的尾结点
L2=(LinkNode *)malloc(sizeof(LinkNode);
L2->next=NULL;
while(p!=NULL)
{ r1->next=p;
r1=p;
p=p->next;
q=p->next;
p->next=L2->next;
L2->next=p;
p=q;
}
r1->next=NULL;
}
这是我画的草图,我就是不知道r1指向L1的尾结点,L1的尾结点是L的NULL,还是说L1后面也指向一个NULL,r1指向L1后面的NULL?
总而言之,就是L1的尾结点在哪?请各位大佬赐教,感谢!
[此贴子已经被作者于2023-3-6 14:34编辑过]


