Algorithm/LeetCode

[LeetCode] 328. Odd Even Linked List (C#)

Henu 2024. 5. 17. 20:59

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

 

 

 

홀수번째 Node를 앞으로 당겨오고, 짝수번째 Node를 뒤로 밀어주는 문제.

 

제한 사항

  • 공간 복잡도 : O(1)
  • 시간 복잡도 : O(N)

 

1. 풀이

  • 더 이상 Odd 노드가 없을 때까지 Odd는 Odd끼리, Even은 Even끼리 연결
  • 마지막에 Odd의 tail과 Even의 head를 연결
namespace PS.LeetCode;

public class Solution_328_1
{
    public class ListNode
    {
        public int val;
        public ListNode next;

        public ListNode(int val = 0, ListNode next = null)
        {
            this.val = val;
            this.next = next;
        }
    }
    
    public ListNode OddEvenList(ListNode head)
    {
        if (head == null)
        {
            return head;
        }
        
        var oddNode = head;
        var evenHead = head.next;
        
        while (oddNode.next?.next != null)
        {
            var evenNode = oddNode.next;
            oddNode.next = oddNode.next.next;
            evenNode.next = oddNode.next.next;
            oddNode = oddNode.next;
        }

        oddNode.next = evenHead;
        
        return head;
    }
}