#yyds干货盘点# LeetCode 腾讯精选练习 50 题:排序链表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# LeetCode 腾讯精选练习 50 题:排序链表相关的知识,希望对你有一定的参考价值。
题目:
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
示例 1:
输入:head = [4,2,1,3]
输出:[1,2,3,4]
示例 2:
输入:head = [-1,5,3,4,0]
输出:[-1,0,3,4,5]
示例 3:
输入:head = []
输出:[]
代码实现:
class Solution
public ListNode sortList(ListNode head)
if (head == null)
return head;
int length = 0;
ListNode node = head;
while (node != null)
length++;
node = node.next;
ListNode dummyHead = new ListNode(0, head);
for (int subLength = 1; subLength < length; subLength <<= 1)
ListNode prev = dummyHead, curr = dummyHead.next;
while (curr != null)
ListNode head1 = curr;
for (int i = 1; i < subLength && curr.next != null; i++)
curr = curr.next;
ListNode head2 = curr.next;
curr.next = null;
curr = head2;
for (int i = 1; i < subLength && curr != null && curr.next != null; i++)
curr = curr.next;
ListNode next = null;
if (curr != null)
next = curr.next;
curr.next = null;
ListNode merged = merge(head1, head2);
prev.next = merged;
while (prev.next != null)
prev = prev.next;
curr = next;
return dummyHead.next;
public ListNode merge(ListNode head1, ListNode head2)
ListNode dummyHead = new ListNode(0);
ListNode temp = dummyHead, temp1 = head1, temp2 = head2;
while (temp1 != null && temp2 != null)
if (temp1.val <= temp2.val)
temp.next = temp1;
temp1 = temp1.next;
else
temp.next = temp2;
temp2 = temp2.next;
temp = temp.next;
if (temp1 != null)
temp.next = temp1;
else if (temp2 != null)
temp.next = temp2;
return dummyHead.next;
以上是关于#yyds干货盘点# LeetCode 腾讯精选练习 50 题:排序链表的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# LeetCode 腾讯精选练习 50 题:螺旋矩阵
#yyds干货盘点# LeetCode 腾讯精选练习 50 题:存在重复元素
#yyds干货盘点# LeetCode 腾讯精选练习 50 题:LRU 缓存
#yyds干货盘点# LeetCode 腾讯精选练习 50 题:螺旋矩阵 II