想问一次这个算法是实现了什么功能?

2-13下述算法实现什么功能?
typedef struct Node{
DataType data;
struct Node *next;
}SLNode;
void DoSomeThing (SLNode *L){
//L是带头结点单链表的头指针
SLNode *Q, *P,*S=L->next;
if (S != NULL && S->next!= NULL){ Q=S;
S=S->next;
P=S;
while(P->next != NULL) P= P->next;
L->next =Q->next;
P->next=Q;
Q->next= NULL;

遍历,以获取链表的尾部。