天天看點

LeetCode題解328.奇偶連結清單(分治算法)java(詳細解釋,逐行代碼注釋)

本題是将連結清單進行分開,舉個例子:

有如下連結清單:1->2->3->4->5->6

經過本題的算法處理後輸出的listNode序列為:1->3->5->2->4->6

也就是将奇數位置與偶數位置的元素聚集在一起;

結合代碼注釋即可看懂

有問題歡迎關注我的微信公衆号:AI學習經曆分享,

LeetCode題解328.奇偶連結清單(分治算法)java(詳細解釋,逐行代碼注釋)

還有大量算法與開發的網盤學習資源,也可以加我微信與我私聊~

算法運作截圖:

LeetCode題解328.奇偶連結清單(分治算法)java(詳細解釋,逐行代碼注釋)
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode oddEvenList(ListNode head) {
        if(head==null){
            return null;//如果連結清單為空則傳回null
        }
        ListNode evenHead = head.next; //定義偶數連結清單的起始節點
        ListNode odd = head,even=evenHead; //odd為奇數的起始節點,even為偶數連結清單的起始節點
        while(even!=null && even.next!=null){
            odd.next=even.next; //奇數連結清單的下一個節點為原來連結清單的偶數位置的下一個節點
            odd=odd.next;//奇數連結清單指派
            even.next=odd.next;//偶數連結清單的下一個節點為原來連結清單的奇數位置的下一個節點
            even=even.next;//偶數連結清單指派
        }
        odd.next=evenHead;//奇數連結清單與偶數連結清單拼接
        return head;//連結清單最終處理結果輸出
    }
}