You are given the
Return the head of the linked list after swapping the values of the
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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 | |
} | |
} |
沒有留言:
張貼留言