diff --git a/Linked List/LinkedList.swift b/Linked List/LinkedList.swift index de8a42c93..bd350469c 100755 --- a/Linked List/LinkedList.swift +++ b/Linked List/LinkedList.swift @@ -270,8 +270,18 @@ extension LinkedList { extension LinkedList { convenience init(array: Array) { self.init() - - array.forEach { append($0) } + guard let first = array.first else { + return + } + var node = Node(value: first) + append(node) + + for item in array[1...] { + let next = Node(value: item) + node.next = next + next.previous = node + node = next + } } } diff --git a/Linked List/Tests/LinkedListTests.swift b/Linked List/Tests/LinkedListTests.swift index b16af05ba..6964c547f 100755 --- a/Linked List/Tests/LinkedListTests.swift +++ b/Linked List/Tests/LinkedListTests.swift @@ -336,4 +336,16 @@ class LinkedListTest: XCTestCase { XCTAssertTrue(value == 3) } + + func testArrayInit() { + let testArray = Array(1...10_000) + + let list = LinkedList(array: testArray) + + XCTAssertEqual(list.head?.value, 1) + XCTAssertEqual(list.last?.value, 10_000) + + XCTAssertEqual(list.count, 10_000) + } + }