알고리즘/고군분투

LeetCode206. Reverse Linked List

언클린 2020. 4. 14. 16:17
728x90

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. 마무리

이번 문제는 푸는데 오래 걸렸다. 막상 코드는 몇 줄 되지 않지만 많은 생각과 방법을 동원했던 것 같다. 처음에 재귀 함수를 사용하여 풀어보려고 한 것이 많은 시간을 소비했고 다시 새로운 방법을 생각한 것이 마무리가 되질 않았다. 너무 성급하게 출력만 내보내려는 마음 때문이었던 것 같아. 처음부터 차근차근 문제에 접근을 하였고 의외로 간단하게 풀 수 있었다. 대부분의 유저도 대부분 비슷하게 풀었던 문제였던 것 같다. 최근에 트리 문제를 풀다 보니 재귀 함수에 자꾸 얽매이게 된 것 같아 한 방향만 보지 않고 접근하는 방법을 좀 더 다양화시켜야 할 것 같다.

728x90

'알고리즘 > 고군분투' 카테고리의 다른 글

LeetCode August3.Valid Palindrome  (0) 2020.08.06
LeetCode706. Design HashMap  (0) 2020.04.20
LeetCode888. Fair Candy Swap  (0) 2020.04.12