[Leetcode] 25. Reverse Nodes in k-Group โ
Problem โ
k๊ฐ์ ๋ ธ๋๋ค๋ง๋ค ํด๋น ๋ ธ๋๋ค์ ์์๋ฅผ ๋ค์ง์ด ๋์ดํ๋ ๋ฌธ์
Solution โ
- ์ฒซ๋ฒ์งธ ๋ ธ๋๋ฅผ ๊ฐ๋ฅดํค๋ ๋น preHead ๋ ธ๋๋ฅผ ์์ฑํ๋ค (head๋ฅผ ๊ฐ๋ฅดํด).
- ์ฒซ๋ฒ์งธ ๋
ธ๋๋ถํฐ k๊ฐ์ ๋
ธ๋๋ฅผ reverseํ๊ธฐ ์ํด์ ๋
ธ๋๋ฅผ ์ด๋ํ๋ฉด์ ๊ฐ ๋
ธ๋๋ฅผ ๋ฐฐ์ด์ ๋ณด๊ดํด๋๋ค.
- ์ด๋ ๋ง์ง๋ง๋ ธ๋๊ฐ ๊ฐ๋ฅดํค๋ ๋ ธ๋๋ฅผ ๊ธฐ์ตํ๋ค.
- ๋ฐฐ์ด์ ๋ค์ง์๋ค์ ๊ฐ ๋ ธ๋์ ๊ฐ๋ฅดํค๋ ๋ฐฉํฅ์ ๋ฐ๋ ๋ฐฉํฅ์ผ๋ก ๋ฐ๊ฟ์ค๋ค.
- ์์ ๋ ธ๋๊ฐ ๋ฐฉํฅ์ด ๋ฐ๋ ๋ ธ๋๋ฅผ ๊ฐ๋ฅดํค๊ฒ ๋ง๋ค๊ณ , ๋ค์งํ ๋ง์ง๋ง๋ ธ๋๊ฐ ์ด์ ์ ์ ์ฅํด๋ ์๋ ๋ง์ง๋ง๋ ธ๋๊ฐ ๊ฐ๋ฅดํค๋ ๋ ธ๋๋ฅผ ๊ฐ๋ฅดํค๋๋กํ๋ค.
- ๋ค์ง๋๋ฐ k๋งํผ ๋ฐฐ์ด์ ๋ฃ์ ์ ์๋ค๋ฉด ์คํ์ ์ค์งํ๋ค.
JS Code โ
javascript
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @param {number} k
* @return {ListNode}
*/
var reverseKGroup = function(head, k) {
const preHead = new ListNode(0,head)
let rear = preHead
const reverseNode = (node) => {
let mvNode = node
let start = new ListNode()
let end = null
let pointer = start
let arr = []
for(let i = 0 ; i < k ; i++) {
if (!mvNode) return node
if (i === k-1) end = mvNode.next
arr.push({...mvNode})
mvNode = mvNode.next
}
arr.reverse().forEach(item => {
if(!start.next) start.next = item
pointer.next = item
pointer = pointer.next
})
pointer.next = end
return start.next
}
while(rear) {
const temp = reverseNode(rear.next)
// console.log(temp)
if (!preHead.next) preHead.next = temp
rear.next = temp
for(let i = 0 ; i < k ; i++) {
if (!rear) break
rear = rear.next
}
}
return preHead.next
};