给定一个单链表的头结点head(该结点有值),长度为n的无序单链表,对其按升序排序后,返回新链表。如当输入链表 {3,1,4,5,2} 时,经升序排列后,原链表变为 {1,2,3,4,5},对应的输出为 {1,2,3,4,5}。
代码实现
C语言代码:
struct ListNode* sortInList(struct ListNode* head ) {
if (head == NULL)
return NULL;
//添加一个头指针,指向head,方便后面的排序
struct ListNode *H;
H = malloc(sizeof(struct ListNode));
H->next=head;
//第一步:定义三个指针
struct ListNode*p,*q,*r;
//第二步:将p指向head,并将头指针断开链接
p = H->next;
H->next = NULL;
//遍历链表
while(p)
{
//第三步:q指向当前要操作的结点,p后移,r指向头指针
q=p;
p=p->next;
r=H;
//第四步:将r的后继数值与当前操作结点q的值进行比较
//若条件成立,r后移一个位置后,继续进行比较
//若条件不成立,跳出while循环,将q指向r的后继,r的后继指向q
while(r->next && r->next->val < q->val)
r=r->next;
q->next = r->next;
r->next = q;
}
//第五步:返回头指针H的后继结点链表
return H->next;
}
图解代码
第一步:定义三个指针

第二步:将p指向head,并将头指针断开链接

第三步:q指向当前要操作的结点,p后移,r指向头指针

第四步:将r的后继数值与当前操作结点q的值进行比较:若条件成立,r后移一个位置后,继续进行比较;若条件不成立,跳出while循环,将q指向r的后继,r的后继指向q







第五步:返回头指针H的后继结点链表

审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !