下列算法的功能是什麽?

来源:百度知道 编辑:UC知道 时间:2024/05/15 08:29:13
LinkList Demo(LinkList L)
{ //L是无头结点的单链表
ListNode *Q,*P;
if(L&&L->next)
{
Q=L;L=L->next;P=L;
while(P->next) P=P->next;
P->next=Q;Q->next=NULL;
}
return L;
}//Demo

这个函数把你传入的L结点移动到了最后那个位置。
同时,由于不知道L前面的结点,所以L前面的结点将全部丢失。
也就是新建了一个以L+1为起点,后面不变,最后一个是L的链表。
过程如下:
Q=L;L=L->next;P=L; 这个你肯定是能看懂的。
我们定义传入的L为Head,这样方便描述。这一句后
Q=Head, L = Head +1, P = Head
然后那个while循环的作用是让P = End -1;(这里的End的意思是最后那个Null的结尾)

然后,P->Next = Q,这就相当于吧链表的end -1 和head连起来了。这时候是个圆圈。
然后q->next = null,把q和L中间的联系断开了,这时候又是个普通的链表了。这个链表的起始是L,结尾是Q

---很奇怪的一个函数。
可能作者的原意是把一个链表的首结点移到最后吧。
这就要求函数的使用者必须传入链表的首结点。
顺便,函数的参数应该是LinkList* L
如果没有*的话,这个函数会编译错误。

按我的理解
应该是把第一个节点移动到第3位并指向空
如果这是个只有3个节点的链表的话
就是把第一个节点移动到最后

如果链表里有至少两个节点(L && L->next),将L放到链表的最后,然后返回节点指针指向链表的倒数第二个节点。