Swift: Solving the "Reverse a Linked List" Problem
Problem: Reverse a Linked List
Given the head of a singly linked list, reverse the list and return the reversed list.
Example:
Input: head = [1, 2, 3, 4, 5]
Output: [5, 4, 3, 2, 1]
Swift Solution
class ListNode {
var val: Int
var next: ListNode?
init(_ val: Int) {
self.val = val
self.next = nil
}
}
class Solution {
func reverseList(_ head: ListNode?) -> ListNode? {
var prev: ListNode? = nil
var current = head
while current != nil {
let nextTemp = current!.next
current!.next = prev
prev = current
current = nextTemp
}
return prev
}
}
// Helper function to print the list
func printList(_ head: ListNode?) {
var node = head
while node != nil {
print(node!.val, terminator: " ")
node = node!.next
}
}
// Example usage
let head = ListNode(1)
head.next = ListNode(2)
head.next?.next = ListNode(3)
head.next?.next?.next = ListNode(4)
head.next?.next?.next?.next = ListNode(5)
let solution = Solution()
let reversedHead = solution.reverseList(head)
printList(reversedHead) // Output: 5 4 3 2 1
Explanation
In this solution, we use three pointers: prev, current, and nextTemp. As we traverse the list, we reverse the direction of each node by pointing it to the previous node. By the end of the traversal, prev will point to the new head of the reversed list.
Sign up here with your email
ConversionConversion EmoticonEmoticon