最大值移动到最后链表的结点移动

已知非空线性链表第1个链结点指针为list,链结点构造为
struct node{
datatype data;
node *link;
};
写一算法,将该链表中数据域值最大的那个点移到链表的最后面。(假设链表中数据域值最大的链结点惟一)
【样例输入】
3 12 4 9 5 1
【样例输出】
3 4 9 5 1 12

遍历链表,找到最大节点的前一个节点,以及链表尾节点。然后将前一节点的next=最大节点的next,再将尾节点的next=最大节点,最大节点的next设置为空
这里假定链表是有哨兵节点的

struct node{
datatype data;
node *link;
};
void func(struct node *list)
{
     struct node *p = list,*tail = NULL,*prev = list;
     datatype max;
     int k = 0;
     while(p->next != NULL)
     {
         if(k==0)
         {
             max = p->next->data;
             k = 1;
         }
         else if(p->next->data > max)
         {
             max = p->next->data;
             prev = p;
         }
         p = p->next;
     }
     tail = p;
     if(tail != prev->next)
     {
          p = prev->next;
          prev->next = prev->next->next;
          p->next = NULL;
          tail->next = p;
     }
}