LeetCode:148. 排序链表
简介题目链接https://leetcode.cn/problems/sort-list/description/解决方式链表 分治法递归 双指针这是作者学习众多大神的思路进行解题的步骤很推荐大家解题的时候去看看题解里面大佬们的思路、想法推荐看灵茶山艾府、Krahets大佬的讲解。分治法解题思路分治分治分而治之。本题大体上是用递归将大的链表分成两个小的链表直到小的链表不能再分。之后就利用双指针按从小到大的顺序合并两个小链表。需要解决两个前置题目链表的中间结点合并两个有序链表classSolution{publicListNodesortList(ListNodehead){// 边界处理递归终止条件if(headnull||head.nextnull){returnhead;}// 递归公式// 得到分开后第二个链表的头节点ListNodehead2middleNode(head);// 分治headsortList(head);head2sortList(head2);// 合并returnmergeList(head,head2);}// 双指针寻找中间节点即第二个链表的头节点privateListNodemiddleNode(ListNodehead){ListNodeslowhead;ListNodefasthead.next;while(fast!nullfast.next!null){fastfast.next.next;slowslow.next;}// 断开链表分成两个ListNodetempslow.next;slow.nextnull;returntemp;}// 双指针合并两个链表privateListNodemergeList(ListNodehead,ListNodehead2){ListNodep1head;ListNodep2head2;ListNodepnewListNode(0);ListNodeprep;while(p1!nullp2!null){if(p1.valp2.val){pre.nextp2;p2p2.next;}else{pre.nextp1;p1p1.next;}prepre.next;}pre.nextp1!null?p1:p2;returnp.next;}}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2440469.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!