2021年9月27日 星期一

[LeetCode] 1721. Swapping Nodes in a Linked List

轉自LeetCode

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]

Example 3:

Input: head = [1], k = 1
Output: [1]

Example 4:

Input: head = [1,2], k = 1
Output: [2,1]

Example 5:

Input: head = [1,2,3], k = 2
Output: [1,2,3]

 

Constraints:

  • The number of nodes in the list is n.
  • 1 <= k <= n <= 105
  • 0 <= Node.val <= 100

Solution

也是用快慢指針來找

但這次因為要 swap,所以要分兩次找

找到相對應的 node 後,swap 其值即可

kotlin

/**
* 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 curNode = head
var firstNode = head
var secondNode = head
IntRange(1,k-1).forEach {
curNode = curNode?.next
}
firstNode = curNode
while(curNode?.next != null) {
curNode = curNode?.next
secondNode = secondNode?.next
}
//>> swap
firstNode!!.`val` = secondNode!!.`val`.also { secondNode!!.`val` = firstNode!!.`val` }
return head
}
}

沒有留言:

張貼留言