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

(cherry picked from commit 955040f0f1)
This commit is contained in:
gecko
2022-01-10 09:27:59 +00:00
committed by narimiran
parent 2539d7a862
commit a90cabbe40
3 changed files with 19 additions and 0 deletions

View File

@@ -11,6 +11,10 @@
## Standard library additions and changes
- `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)).
## Language changes

View File

@@ -740,6 +740,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()