Fix remove on last node of singly-linked list [backport:1.6] (#19353)
This commit is contained in:
parent
b098546da0
commit
955040f0f1
3 changed files with 16 additions and 0 deletions
|
|
@ -22,6 +22,7 @@
|
||||||
- `macros.parseExpr` and `macros.parseStmt` now accept an optional
|
- `macros.parseExpr` and `macros.parseStmt` now accept an optional
|
||||||
filename argument for more informative errors.
|
filename argument for more informative errors.
|
||||||
- Module `colors` expanded with missing colors from the CSS color standard.
|
- 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`
|
## `std/smtp`
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -739,6 +739,8 @@ proc remove*[T](L: var SinglyLinkedList[T], n: SinglyLinkedNode[T]): bool {.disc
|
||||||
if prev.next == nil:
|
if prev.next == nil:
|
||||||
return false
|
return false
|
||||||
prev.next = n.next
|
prev.next = n.next
|
||||||
|
if L.tail == n:
|
||||||
|
L.tail = prev # update tail if we removed the last node
|
||||||
true
|
true
|
||||||
|
|
||||||
proc remove*[T](L: var DoublyLinkedList[T], n: DoublyLinkedNode[T]) =
|
proc remove*[T](L: var DoublyLinkedList[T], n: DoublyLinkedNode[T]) =
|
||||||
|
|
|
||||||
|
|
@ -258,5 +258,18 @@ template main =
|
||||||
a.add(2)
|
a.add(2)
|
||||||
doAssert a.toSeq == @[1, 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()
|
static: main()
|
||||||
main()
|
main()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue