Welcome to collectivesolver - Programming & Software Q&A with code examples. A website with trusted programming answers. All programs are tested and work.

Contact: aviboots(AT)netvision.net.il

Semrush - keyword research tool

Turn ChatGPT, Claude, Gemini, And CoPilot Into Your Personal Assistant, Business Coach, Content Creator, And More

AFFILIATE MARKETING Your all-in-one performance engine Manage affiliates, creators, and customer referrals in one unified platform—turning every partnership into measurable growth
Secure & Reliable Web Hosting, Free Domain, Free SSL, 1-Click WordPress Install, Expert 24/7 Support

Boost your online presence with premium web hosting and servers

Disclosure: My content contains affiliate links.

42,846 questions

55,675 answers

573 users

How to reverse a singly linked list in-place in Swift

1 Answer

0 votes
import Foundation

// A singly linked list node (reference type)
final class ListNode {
    var value: Int          // data stored in the node
    var next: ListNode?     // pointer to the next node

    init(_ value: Int, _ next: ListNode? = nil) {
        self.value = value
        self.next = next
    }
}

// Reverse the linked list in-place
func reverseList(_ head: ListNode?) -> ListNode? {
    var prev: ListNode? = nil        // will become the new head
    var current = head               // pointer to traverse the list

    while current != nil {
        let nextNode = current?.next // save next node
        current?.next = prev         // reverse the link
        prev = current               // move prev forward
        current = nextNode           // move current forward
    }

    return prev  // prev is the new head
}

// Print the linked list
func printList(_ head: ListNode?) {
    var temp = head
    while temp != nil {
        print(temp!.value, terminator: "")
        if temp?.next != nil { print(" -> ", terminator: "") }
        temp = temp?.next
    }
    print()
}

// Build a sample list: 1 -> 2 -> 3 -> 4 -> 5
let head = ListNode(1,
            ListNode(2,
                ListNode(3,
                    ListNode(4,
                        ListNode(5)
                    )
                )
            )
        )

print("Original list:")
printList(head)

// Reverse the list
let reversed = reverseList(head)

print("Reversed list:")
printList(reversed)


/*
run:

Original list:
1 -> 2 -> 3 -> 4 -> 5
Reversed list:
5 -> 4 -> 3 -> 2 -> 1

*/

 



answered Jun 30 by avibootz
...