1. 문제(원본)
Reverse a singly linked list.
Example:
Input: 1->2->3->4->5->NULL Output: 5->4->3->2->1->NULL
Follow up:
A linked list can be reversed either iteratively or recursively. Could you implement both?
2. 문제
입력된 연결 리스트를 역순으로 가진 연결리스트를 반환하여라
public class ListNode {
public var val: Int
public var next: ListNode?
public init(_ val: Int) {
self.val = val
self.next = nil
}
}
3. 나의 답
class Solution {
func reverseList(_ head: ListNode?) -> ListNode? {
var root = head
var reverse: ListNode? = nil
var next: ListNode? = nil
while root != nil {
next = root?.next
// swap
root?.next = reverse
reverse = root
root = next
}
return reverse
}
}
4. 다른 유저의 답
#1
class Solution {
func reverseList(_ head: ListNode?) -> ListNode? {
var currentNode = head
var prevNode: ListNode?
var nextNode: ListNode?
while currentNode != nil {
nextNode = currentNode?.next
currentNode?.next = prevNode
prevNode = currentNode
currentNode = nextNode
}
return prevNode
}
}
5. 마무리
이번 문제는 푸는데 오래 걸렸다. 막상 코드는 몇 줄 되지 않지만 많은 생각과 방법을 동원했던 것 같다. 처음에 재귀 함수를 사용하여 풀어보려고 한 것이 많은 시간을 소비했고 다시 새로운 방법을 생각한 것이 마무리가 되질 않았다. 너무 성급하게 출력만 내보내려는 마음 때문이었던 것 같아. 처음부터 차근차근 문제에 접근을 하였고 의외로 간단하게 풀 수 있었다. 대부분의 유저도 대부분 비슷하게 풀었던 문제였던 것 같다. 최근에 트리 문제를 풀다 보니 재귀 함수에 자꾸 얽매이게 된 것 같아 한 방향만 보지 않고 접근하는 방법을 좀 더 다양화시켜야 할 것 같다.
'알고리즘 > 고군분투' 카테고리의 다른 글
LeetCode August3.Valid Palindrome (0) | 2020.08.06 |
---|---|
LeetCode706. Design HashMap (0) | 2020.04.20 |
LeetCode888. Fair Candy Swap (0) | 2020.04.12 |