Daily LeetCode Challenge - 1721. Swapping Nodes in a Linked List

Min Young Kim·2023년 5월 15일
0

algorithm

목록 보기
147/198

Problem From.

https://leetcode.com/problems/swapping-nodes-in-a-linked-list/

오늘 문제는 linked list 가 주어졌을때, 앞에서부터 k 번째 node 와 뒤에서부터 k 번째의 node 를 서로 바꾸는 문제였다.

앞에서부터 k 번째 노드는 앞에서부터 k 번 반복하면서 보면 금방 찾을 수 있지만, 뒤에서부터 k 번째 노드는 다른 방법을 사용해야했다.
먼저 앞에서부터 k 번 탐색하여 찾은 노드를 기준점으로 두고, head 에서부터 시작하는 또 다른 포인터를 둔다.
그리고 k번째 노드가 한번 다음으로 나갈때마다 head 의 포인터를 한단계 다음으로 옮긴다. 이를 반복하면서 k번째 노드에서 시작한 포인터의 next 가 null 이 될때까지 반복하면, head 에 있던 포인터는 뒤에서부터 k 번째 노드에 멈추게 된다.

/**
 * 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 swapNodes(head: ListNode?, k: Int): ListNode? {
        
        var tempNode : ListNode? = null
        var startNode : ListNode? = null
        var endNode : ListNode? = null
        
        
        for(i in 1..k) {
            if(i == 1) tempNode = head
            else tempNode = tempNode?.next
        }
        
        startNode = tempNode
        
        endNode = head
        
        while(tempNode?.next != null) {
            endNode = endNode?.next
            tempNode = tempNode?.next
        }
        
        val swap = startNode?.`val`
        startNode?.`val` = endNode?.`val`
        endNode?.`val` = swap
        
        return head
    }
}
profile
길을 찾는 개발자

0개의 댓글