鏈表 奇偶鏈表

2020-06-20 14:56 更新

題目

給定一個(gè)單鏈表,把所有的奇數(shù)節(jié)點(diǎn)和偶數(shù)節(jié)點(diǎn)分別排在一起。請(qǐng)注意,這里的奇數(shù)節(jié)點(diǎn)和偶數(shù)節(jié)點(diǎn)指的是節(jié)點(diǎn)編號(hào)的奇偶性,而不是節(jié)點(diǎn)的值的奇偶性。

請(qǐng)嘗試使用原地算法完成。你的算法的空間復(fù)雜度應(yīng)為 O(1),時(shí)間復(fù)雜度應(yīng)為 O(nodes),nodes 為節(jié)點(diǎn)總數(shù)。

示例 1:

輸入: 1->2->3->4->5->NULL 輸出: 1->3->5->2->4->NULL

示例 2:

輸入: 2->1->3->5->6->4->7->NULL 輸出: 2->3->6->7->1->5->4->NULL

說(shuō)明:

應(yīng)當(dāng)保持奇數(shù)節(jié)點(diǎn)和偶數(shù)節(jié)點(diǎn)的相對(duì)順序。 鏈表的第一個(gè)節(jié)點(diǎn)視為奇數(shù)節(jié)點(diǎn),第二個(gè)節(jié)點(diǎn)視為偶數(shù)節(jié)點(diǎn),以此類(lèi)推。

題解一:JAVA

1.利用head指向頭部,odd指向next,even指向雙數(shù)

2.迭代

3.返回head?

因?yàn)殒湵淼牡扔谥笫怯呻p方一起操作這條鏈。

/**
 * 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;
        ListNode odd=head,even=head.next,evenHead=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;


    }
}

題解二:C++

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* oddEvenList(ListNode* head) {
        ListNode *curr = NULL;
        if (head == NULL || head->next == NULL || head->next->next == NULL)
            return head;
        ListNode *evenHead = head->next, *oddHead = head, *evenLast = evenHead, *oddLast = oddHead;
        curr = head->next->next;
        bool oddFalg = true;
        while (curr != NULL){
            if (oddFalg){
                oddLast->next = curr;
                oddLast = curr;
            } else {
                evenLast->next = curr;
                evenLast = curr;
            }
            curr = curr->next;
            oddFalg = !oddFalg;
        }
        oddLast->next = evenHead;
        evenLast->next = NULL;
        return oddHead;
    }
};

以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)