From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.5-pre1 Path: eternal-september.org!reader02.eternal-september.org!aioe.org!yy9MKEJN2ULhWGfnfq4v5w.user.gioia.aioe.org.POSTED!not-for-mail From: Simon Wright Newsgroups: comp.lang.ada Subject: Re: can't understand how to move a node of a linked list to another place on the same Date: Fri, 19 Feb 2021 09:09:23 +0000 Organization: Aioe.org NNTP Server Message-ID: References: <1b206764-967c-4b1b-af9c-61a0cd0750fcn@googlegroups.com> <84c3e8ee-e4e9-4402-8da6-e43a44eca66bn@googlegroups.com> <4e824d60-5e60-4af8-97cd-30b76ced5943n@googlegroups.com> NNTP-Posting-Host: yy9MKEJN2ULhWGfnfq4v5w.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain X-Complaints-To: abuse@aioe.org User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (darwin) Cancel-Lock: sha1:6NeoK8szGvTXq8HnHH4s9+6EvXY= X-Notice: Filtered by postfilter v. 0.9.2 Xref: reader02.eternal-september.org comp.lang.ada:61384 List-Id: Mehdi Saada <00120260a@gmail.com> writes: > X means the node of place X, that I want moved before the node of > place Y. I don't think it does that; I think it moves it _after_. Weren't you just having a conversation about clarity of purpose? May I say that a simple linked list isn't a good structure if you want to do this sort of thing to it! as you (and I) have found. Consider a list [p q r s t] and you want to move r after s. I'm going to use w -> x to mean that the node whose value is 'w' has Next pointing to the node whose value is 'y'; personally I find it easier to draw the nodes on paper, it's hard work typing the equivalent. YMMV. Using your original naming, Before_A -> q, Before_B -> r. procedure Insertion_A_On_Place_B (Before_A, Before_B: in T_List) is A: constant T_List := Before_A.Next; -- r B: constant T_List := Before_B.Next; -- s begin Before_A.Next := A.Next; -- q -> s A.Next := B; -- r -> s (no change!) Before_B.Next := A; -- r -> r end Insertion_A_On_Place_B; and the list is now [p q s t], with r left dangling and pointing to itself.