Problem From.
https://leetcode.com/problems/swap-nodes-in-pairs/
오늘 문제는 linked list 가 주어졌을때, 각각의 첫번째와 두번째를 바꾸고, 세번째와 네번째의 노드를 바꾸는 작업을 반복하여 반환하는 문제였다.
linked list 의 노드를 계속 관리해나가는게 관건인 문제였는데, 먼저 노드의 제일 앞에 dummy 노드를 만들어두고, 거기에 head 를 붙여둔다. 그리고 first 와 second 노드를 만들어서 head 노드와 그 다음 노드를 넣어두고 dummy 노드 뒤에 붙인다음 현재 노드인 curr 를 갱신해준다.
위 작업을 반복하여 마지막에 dummy.next 를 통해서 head 를 가져온다.
/**
* Example:
* var li = ListNode(5)
* var v = li.`val`
* Definition for singly-linked list.
* class ListNode(var `val`: Int) {
* var next: ListNode? = null
* }
*/
class Solution {
fun swapPairs(head: ListNode?): ListNode? {
if(head?.next == null) return head
var answer : ListNode? = ListNode(0)
answer?.next = head
var curr : ListNode? = answer
while(curr?.next != null && curr?.next?.next != null) {
var first : ListNode? = curr?.next
var second: ListNode? = curr?.next?.next
curr?.next = second
first?.next = second?.next
second?.next = first
curr = curr?.next?.next
}
return answer?.next
}
}