From 713cf8a15add9929718c62780da54ccc0531c0aa Mon Sep 17 00:00:00 2001 From: Philipp Wallrich Date: Thu, 24 Dec 2020 00:16:12 +0100 Subject: [PATCH] Improve LinkedList Array initliasier --- Linked List/LinkedList.swift | 14 ++++++++++++-- Linked List/Tests/LinkedListTests.swift | 12 ++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) 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) + } + }