Fix remove on last node of singly-linked list [backport:1.6] (#19353)

This commit is contained in:
gecko
2022-01-10 09:27:59 +00:00
committed by GitHub
parent b098546da0
commit 955040f0f1
3 changed files with 16 additions and 0 deletions

View File

@@ -22,6 +22,7 @@
- `macros.parseExpr` and `macros.parseStmt` now accept an optional
filename argument for more informative errors.
- Module `colors` expanded with missing colors from the CSS color standard.
- Fixed `lists.SinglyLinkedList` being broken after removing the last node ([#19353](https://github.com/nim-lang/Nim/pull/19353)).
## `std/smtp`

View File

@@ -739,6 +739,8 @@ proc remove*[T](L: var SinglyLinkedList[T], n: SinglyLinkedNode[T]): bool {.disc
if prev.next == nil:
return false
prev.next = n.next
if L.tail == n:
L.tail = prev # update tail if we removed the last node
true
proc remove*[T](L: var DoublyLinkedList[T], n: DoublyLinkedNode[T]) =

View File

@@ -258,5 +258,18 @@ template main =
a.add(2)
doAssert a.toSeq == @[1, 2]
block RemoveLastNodeFromSinglyLinkedList:
var list = initSinglyLinkedList[string]()
let n1 = newSinglyLinkedNode("sonic")
let n2 = newSinglyLinkedNode("the")
let n3 = newSinglyLinkedNode("tiger")
let n4 = newSinglyLinkedNode("hedgehog")
list.add(n1)
list.add(n2)
list.add(n3)
list.remove(n3)
list.add(n4)
doAssert list.toSeq == @["sonic", "the", "hedgehog"]
static: main()
main()