Java詳解如何將一條單向鏈表按節(jié)點奇偶位置分解
給定一個單向無環(huán)鏈表,實現(xiàn)一個算法,按照鏈表節(jié)點奇偶位置分解為兩條鏈表,鏈接為一條鏈表后返回。編寫鏈表節(jié)點類我們首先需要編寫一個靜態(tài)內(nèi)部類來代表鏈表的節(jié)點。這個節(jié)點類包含一個值屬性和一個指向下一個節(jié)點
給定一個單向無環(huán)鏈表,實現(xiàn)一個算法,按照鏈表節(jié)點奇偶位置分解為兩條鏈表,鏈接為一條鏈表后返回。
編寫鏈表節(jié)點類
我們首先需要編寫一個靜態(tài)內(nèi)部類來代表鏈表的節(jié)點。這個節(jié)點類包含一個值屬性和一個指向下一個節(jié)點的引用。
```java
public class ListNode {
int val;
ListNode next;
public ListNode(int val) {
val;
null;
}
}
```
實現(xiàn)算法
下面我們來實現(xiàn)按照奇偶位置分解鏈表的算法。具體步驟如下:
1. 創(chuàng)建兩個空節(jié)點,作為原鏈表奇偶位置子鏈表的頭節(jié)點。
2. 遍歷原始鏈表,將節(jié)點按照奇偶位置分解并鏈接起來。
3. 將通過節(jié)點奇偶位置構(gòu)建的子鏈表鏈接為一條鏈表并返回。
```java
public ListNode splitListByOddEven(ListNode head) {
if (head null || null) {
return head;
}
ListNode oddHead new ListNode(0);
ListNode evenHead new ListNode(0);
ListNode odd oddHead;
ListNode even evenHead;
ListNode curr head;
boolean isOdd true;
while (curr ! null) {
if (isOdd) {
curr;
odd ;
} else {
curr;
even ;
}
curr ;
isOdd !isOdd;
}
;
null;
return ;
}
```
輔助函數(shù):將鏈表轉(zhuǎn)為字符串
為了方便測試程序,我們還需要編寫一個函數(shù),可以將一條單向無環(huán)鏈表轉(zhuǎn)變?yōu)橐粋€字符串,便于輸出鏈表。
```java
public String convertToString(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();
// 創(chuàng)建鏈表 1 -> 2 -> 3 -> 4 -> 5
ListNode head new ListNode(1);
ListNode node2 new ListNode(2);
ListNode node3 new ListNode(3);
ListNode node4 new ListNode(4);
ListNode node5 new ListNode(5);
node2;
node3;
node4;
node5;
("原鏈表:" (head));
ListNode result solution.splitListByOddEven(head);
("奇偶位置分解后的鏈表:" (result));
}
```
觀察輸出結(jié)果
運行本地測試方法,觀察控制臺輸出,確保輸出符合預(yù)期。
提交算法
經(jīng)過本地測試驗證,我們可以將算法提交到目標(biāo)平臺進行測試。