LeetCode:Odd Even Linked List - 鏈表內元素按奇偶位置從新排序

一、題目名稱java

Odd Even Linked List(鏈表內元素按奇偶位置從新排序)node

二、題目地址spa

https://leetcode.com/problems/odd-even-linked-list/code

三、題目內容排序

英文:leetcode

Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes.開發

You should try to do it in place. The program should run in O(1) space complexity and O(nodes) time complexity.get

Example:
Given 1->2->3->4->5->NULL,
return 1->3->5->2->4->NULL.it

中文:io

給出一個鏈表,將全部奇數位置的節點和偶數位置的節點都歸攏到一塊兒,將偶數位置的節點放在全部奇數位置節點的後面。例如,給出鏈表1->2->3->4->5->NULL,應返回鏈表1->3->5->2->4->NULL。注意

四、解題方法

我使用的方法是,新建兩個鏈表,分別存儲奇數位置和偶數位置的節點,最後將兩個鏈表接上,獲得的結果即爲所求。

Java代碼以下:

/**
 * @功能說明:LeetCode 328 - Odd Even Linked List
 * @開發人員:Tsybius2014
 * @開發時間:2016年1月21日
 */
public class Solution {
    /**
     * 將一個鏈表內的奇數元素放在前面,偶數元素放在後面
     * @param head 鏈表首節點
     * @return 轉換後的鏈表
     */
    public ListNode oddEvenList(ListNode head) {
        //輸入合法性判斷
        if (head == null) {
            return null;
        } else if (head.next == null) {
            return head;
        }
        ListNode odd = new ListNode(0);  //奇數鏈表:僅存放奇數位置節點
        ListNode oddCurr = odd;          //奇數鏈表的鏈表尾節點
        ListNode even = new ListNode(0); //偶數鏈表:僅存放偶數位置節點
        ListNode evenCurr = even;        //偶數鏈表的鏈表尾節點
        //分別生成奇數鏈表和偶數鏈表
        ListNode tmp = head;
        int counter = 0;
        while (tmp != null) {
            counter++;
            if (counter % 2 != 0) {
                oddCurr.next = new ListNode(tmp.val);
                oddCurr = oddCurr.next;
            } else {
                evenCurr.next = new ListNode(tmp.val);
                evenCurr = evenCurr.next;
            }
            tmp = tmp.next;
        }
        oddCurr.next = even.next; //偶數鏈表接在奇數鏈表後面
        return odd.next;
    }
}

END

相關文章
相關標籤/搜索