成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

Java如何對一條單向鏈表進行插入排序

給定一條單向鏈表,我們需要對其進行插入排序,并返回一個有序的鏈表。同時,我們需要滿足原地操作的約束,即空間復雜度為O(1)。圖示鏈表節(jié)點定義首先,我們聲明一個靜態(tài)內(nèi)部類,用于表示鏈表節(jié)點,以便構(gòu)建一條

給定一條單向鏈表,我們需要對其進行插入排序,并返回一個有序的鏈表。同時,我們需要滿足原地操作的約束,即空間復雜度為O(1)。

圖示鏈表節(jié)點定義

首先,我們聲明一個靜態(tài)內(nèi)部類,用于表示鏈表節(jié)點,以便構(gòu)建一條鏈表結(jié)構(gòu)。

```java

public class ListNode {

int val;

ListNode next;

public ListNode(int val) {

val;

}

}

```

插入排序算法實現(xiàn)

接下來,我們實現(xiàn)基于單向鏈表的插入排序算法。算法思想如下:

1. 由于鏈表無法像數(shù)組一樣隨機訪問,對于每個節(jié)點,我們需要從頭開始遍歷鏈表,找到合適的位置進行插入。

2. 由于需要調(diào)換節(jié)點的位置,我們需要在節(jié)點的前導節(jié)點基礎(chǔ)上進行操作。因此,我們創(chuàng)建一個虛擬頭節(jié)點作為原始鏈表的前導節(jié)點。

```java

public ListNode insertionSortList(ListNode head) {

if (head null || null) {

return head;

}

ListNode dummy new ListNode(Integer.MIN_VALUE); // 虛擬頭節(jié)點

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 ;

}

```

輔助函數(shù):鏈表轉(zhuǎn)字符串

我們編寫一個輔助函數(shù),用于將鏈表結(jié)構(gòu)轉(zhuǎn)換為一個字符串,以便進行本地測試。

```java

public String listToString(ListNode head) {

StringBuilder sb new StringBuilder();

ListNode curr head;

while (curr ! null) {

().append(" -> ");

curr ;

}

("null");

return ();

}

```

本地測試

接下來,我們編寫一個主方法用于進行本地測試,并觀察控制臺輸出結(jié)果是否符合預(yù)期。

```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));

}

```

運行本地測試主方法,觀察控制臺輸出結(jié)果。如果和預(yù)期結(jié)果相符,則說明本地測試通過。

提交算法并進行測試

最后,我們將代碼提交到平臺上進行測試。如果通過了平臺的測試,那么我們的算法實現(xiàn)是正確的。

以上就是Java如何對一條單向鏈表進行插入排序的相關(guān)內(nèi)容。通過使用插入排序算法,我們可以在原地操作的情況下,對單向鏈表進行排序,并返回一個有序鏈表。

標簽: