2016 - 2024

感恩一路有你

Java如何对一条单向链表进行插入排序

浏览量:4699 时间:2024-01-31 19:52:28 作者:采采

给定一条单向链表,我们需要对其进行插入排序,并返回一个有序的链表。同时,我们需要满足原地操作的约束,即空间复杂度为O(1)。

图示链表节点定义

首先,我们声明一个静态内部类,用于表示链表节点,以便构建一条链表结构。

```java

public class ListNode {

int val;

ListNode next;

public ListNode(int val) {

val;

}

}

```

插入排序算法实现

接下来,我们实现基于单向链表的插入排序算法。算法思想如下:

1. 由于链表无法像数组一样随机访问,对于每个节点,我们需要从头开始遍历链表,找到合适的位置进行插入。

2. 由于需要调换节点的位置,我们需要在节点的前导节点基础上进行操作。因此,我们创建一个虚拟头节点作为原始链表的前导节点。

```java

public ListNode insertionSortList(ListNode head) {

if (head null || null) {

return head;

}

ListNode dummy new ListNode(Integer.MIN_VALUE); // 虚拟头节点

head;

ListNode curr head;

ListNode prev dummy;

while (curr ! null) {

if ( < ) {

ListNode temp dummy;

while ( ! null < ) {

temp ;

}

ListNode next ;

;

curr;

curr next;

} else {

curr ;

prev ;

}

}

return ;

}

```

辅助函数:链表转字符串

我们编写一个辅助函数,用于将链表结构转换为一个字符串,以便进行本地测试。

```java

public String listToString(ListNode head) {

StringBuilder sb new StringBuilder();

ListNode curr head;

while (curr ! null) {

().append(" -> ");

curr ;

}

("null");

return ();

}

```

本地测试

接下来,我们编写一个主方法用于进行本地测试,并观察控制台输出结果是否符合预期。

```java

public static void main(String[] args) {

Solution solution new Solution();

ListNode head new ListNode(4);

new ListNode(2);

new ListNode(1);

new ListNode(3);

ListNode sortedList (head);

((sortedList));

}

```

运行本地测试主方法,观察控制台输出结果。如果和预期结果相符,则说明本地测试通过。

提交算法并进行测试

最后,我们将代码提交到平台上进行测试。如果通过了平台的测试,那么我们的算法实现是正确的。

以上就是Java如何对一条单向链表进行插入排序的相关内容。通过使用插入排序算法,我们可以在原地操作的情况下,对单向链表进行排序,并返回一个有序链表。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。