328. 奇偶链表

180 阅读1分钟

题目描述

image.png

代码

  • 奇偶交替进行,一次遍历

A04786553B4B75BCF316EDB86CFCAD6D.png

  • 注意边界情况,当节点数为偶数个时,倒数第二节点.next会指向倒数第一节点,由于后面直接cur1.next = evenhead,所以不影响。 6BC87A5F447A4701B904890A6CFECE0B.png
class Solution {
    public ListNode oddEvenList(ListNode head) {
        if (head == null) return null;
        ListNode oddHead = head, envenHead = head.next;
        ListNode cur1= oddHead, cur2 = envenHead;
        // 奇偶交替进行
        while (cur1.next != null && cur2.next != null) {//注意不能写成 cur1 != null && cur2 != null
            //odd node
            cur1.next = cur2.next;
            cur1 = cur1.next;
            //even node
            cur2.next = cur1.next;
            cur2 = cur2.next;
        }
        cur1.next = envenHead;
        return oddHead;
    }
}