首页 > 其他分享 >【链表】LeetCode 328. 奇偶链表

【链表】LeetCode 328. 奇偶链表

时间:2023-01-03 19:12:14浏览次数:56  
标签:奇偶 head lastEven traversal 链表 lastOdd 328 next

题目链接

328. 奇偶链表

思路

根据题意,我们只需要将扫描到的索引为奇数的结点不断插入到正确位置。

比如
1->2->3->4->5 ==》 1->3->2->4->5 ==》 1->3->5->2->4

在扫描过程中需要维护四个变量:

  1. lastOdd 表示已经到正确位置的最后一个奇数,在上方例子中 lastOdd 一开始是1,然后变为3,然后变为5。
  2. firstEven 记录原始链表中第二个结点,因为在不断的插入过程中,head.next 值会改变。
  3. lastEven 表示当前排列好的最后一个偶数,在上方例子中,lastEven 一开始是2,然后变为4。
  4. traversal 为遍历结点,负责遍历整个链表。

代码

class Solution {
    public ListNode oddEvenList(ListNode head) {

        if(head == null){
            return null;
        }
        if(head.next == null){
            return head;
        }

        ListNode lastOdd = head;
        ListNode firstEven = head.next;
        ListNode lastEven = head.next;
        ListNode traversal = head.next.next;

        for(int i = 3; traversal != null; traversal = traversal.next, i++){
            if(i % 2 == 1){
                ListNode temp = lastEven;
                lastEven.next = traversal.next;
                traversal.next = firstEven;
                lastOdd.next = traversal;

                // update lastOdd
                lastOdd = lastOdd.next;
                traversal = temp;
            }else{
                // update lastEven
                lastEven = traversal;
            }
        }

        return head;
    }
}

标签:奇偶,head,lastEven,traversal,链表,lastOdd,328,next
From: https://www.cnblogs.com/shixuanliu/p/17023149.html

相关文章

  • 【链表】LeetCode 92. 反转链表 II
    题目链接92.反转链表II思路和【链表】LeetCode206.反转链表的思路一样,只不过需要调整一下realHead头结点的位置,同时原题中的null在本题中为rightNode的下一个结点。......
  • Parity Game(奇偶游戏)(POJ1733、AcWing 239)(并查集)(扩展域写法+边带权写法)
    题目小A和小B在玩一个游戏。首先,小A写了一个由0和1组成的序列S,长度为N。然后,小B向小A提出了M个问题。在每个问题中,小B指定两个数l和r,小A回答S[l......
  • 【链表】LeetCode 142. 环形链表 II
    题目链接142.环形链表II思路代码classSolution{publicListNodedetectCycle(ListNodehead){if(head==null){returnnull;......
  • 206. 反转链表
    题目链接https://leetcode.cn/problems/reverse-linked-list/description/解题思路按照我们解递归的一般思路,首先确定参数和返回值。从题意可以看出,参数是给定一个链表......
  • 203. 移除链表元素
    题目链接https://leetcode.cn/problems/remove-linked-list-elements/description/解题思路按照我们解决递归的思路,我们首先想,这个递归函数,应该返回什么,应该定义什么参......
  • 【链表】LeetCode 141. 环形链表
    题目链接141.环形链表思路设置fast指针和slow指针,分别走两步和一步,如果链表有环的话,那么两个指针一定会在某一时刻相遇。可以想象成速度不同的两个人跑圈,只要时间足够......
  • 【链表】LeetCode 160.相交链表
    题目链接160.相交链表思路1先测量两个链表的长度,记录差值k=abs(n1-n2),然后让短的链表先走k步,这样就能保证剩下的长度是一样的,再同步遍历即可。代码1classSolution......
  • 【链表】LeetCode 876.链表的中间结点
    题目链接876.链表的中间结点思路定义两个指针fast和slow,快的指针一次走两步,慢的指针一次走一步,这样当快的指针走到底的时候,慢指针正好在中间。以下两幅图说明了偶数结......
  • 每日算法之删除链表中重复的结点
    JZ76删除链表中重复的结点题目给定一个二叉树,返回该二叉树的之字形层序遍历,(第一层从左向右,下一层从右向左,一直这样交替)例如,给定的二叉树是{1,2,3,#,#,4,5}该二叉树之......
  • 刷刷刷Day2| 142.环形链表II
    142.环形链表IILeetCode题目要求给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪......