Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 홀수 짝수 연결 목록

<시간/>

단일 연결 목록이 있다고 가정하고 모든 홀수 노드와 짝수 노드를 그룹화해야 합니다. 여기서 우리는 노드의 값이 아니라 노드 위치에 대해 이야기하고 있습니다. 우리는 그 자리에서 그것을 하려고 노력해야 합니다. 따라서 노드가 [1,22,13,14,25]이면 결과는 [1,13,25,22,14]

가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • head가 null이거나 head의 다음이 null이면 head를 반환합니다.
  • head1 :=머리, head2 :=머리 옆, head_beg :=머리 옆
  • head2의 다음이 null이 아니고 다음(head의 다음이 null이 아님)인 동안
    • head1 옆 :=head2 옆
    • head2의 다음 =(머리의 다음)
    • head1 :=head1 옆, head2 :=head2 옆
  • head2의 다음이 null이 아닌 경우
    • head1 옆 :=head2 옆
    • head1 :=head1의 다음
  • head1의 다음:=head2_beg 및 head2의 다음 =null
  • 리턴 헤드

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

class ListNode:
   def __init__(self, data, next = None):
      self.val = data
      self.next = next
def make_list(elements):
   head = ListNode(elements[0])
   for element in elements[1:]:
      ptr = head
      while ptr.next:
         ptr = ptr.next
      ptr.next = ListNode(element)
   return head
def print_list(head):
   ptr = head
   print('[', end = "")
   while ptr:
      print(ptr.val, end = ", ")
      ptr = ptr.next
   print(']')
class Solution(object):
   def oddEvenList(self, head):
      if head == None or head.next ==None:
         return head
      head1=head
      head2,head2_beg= head.next,head.next
      while head2.next!= None and head2.next.next!= None:
         head1.next = head2.next
         head2.next = head2.next.next
         head1 = head1.next
         head2 = head2.next
      if head2.next!=None:
         head1.next = head2.next
         head1 = head1.next
      head1.next = head2_beg
      head2.next = None
      return head
ob1 = Solution()
head = make_list([1,22,13,14,25])
print_list(ob1.oddEvenList(head))

입력

[1,22,13,14,25]

출력

[1, 13, 25, 22, 14, ]