给定一个单链表的头结点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条评论
快来发表一下你的评论吧 !