LeetCode in Kotlin

1721. Swapping Nodes in a Linked List

Medium

You are given the head of a linked list, and an integer k.

Return the head of the linked list after swapping the values of the kth node from the beginning and the kth node from the end (the list is 1-indexed).

Example 1:

Input: head = [1,2,3,4,5], k = 2

Output: [1,4,3,2,5]

Example 2:

Input: head = [7,9,6,6,7,8,3,0,9,5], k = 5

Output: [7,9,6,6,8,7,3,0,9,5]

Constraints:

Solution

import com_github_leetcode.ListNode

/*
 * Example:
 * var li = ListNode(5)
 * var v = li.`val`
 * Definition for singly-linked list.
 * class ListNode(var `val`: Int) {
 *     var next: ListNode? = null
 * }
 */
@Suppress("NAME_SHADOWING")
class Solution {
    fun swapNodes(head: ListNode?, k: Int): ListNode? {
        var k: Int = k
        var beg: ListNode? = null
        var end: ListNode? = null
        var node = head
        while (node != null) {
            k--
            if (k == 0) {
                beg = node
                end = head
            } else if (end != null) {
                end = end.next
            }
            node = node.next
        }
        if (beg != null) {
            val tem = beg.`val`
            beg.`val` = end!!.`val`
            end.`val` = tem
        }
        return head
    }
}