Python Switching the links in a linked list

  • Thread starter Thread starter FallenApple
  • Start date Start date
  • Tags Tags
    Links List
AI Thread Summary
The discussion focuses on the challenge of rearranging a linked list from a sequence of nodes a->b->c->d to b->a->d->c through pointer manipulation. The original attempt involved changing pointers between nodes but resulted in an incorrect output, specifically leaving the list as b->a->c->d instead of the desired order. Key insights include the importance of careful ordering in pointer adjustments to avoid conflicts and orphaned nodes. It is suggested that when swapping nodes, especially non-adjacent ones, external pointers should be swapped first, followed by the internal next pointers. Additionally, implementing a doubly linked list is recommended for better management of node connections, and caution is advised to check for null pointers to prevent memory leaks.
FallenApple
Messages
564
Reaction score
61
So I have a linked list a->b->c->d

and I want to make another list

b->a->d->c

in a systematic way by interchanging pointers. But for some reason it isn't working. All I did was move the link between b and c into b to a. Then the link from a to b, changed to a to d. Then the one connecting c to d is reversed. I'm not sure what went wrong.
Python:
class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None
       
       
       
A=['a','b','c','d']
head=ListNode(A[0])
#filling the linked list with abcd
temp=head
for i in A[1:]:
  temp.next=ListNode(i)
  temp=temp.next
 
 
point=head
print("the current linked list")

while(point):
  print(point.val)
  point=point.next

print("   ")

#attempting to alter the list
Temp1=head.next.next  
head.next.next=head    # moving the link between b-c to a
Temp2=head.next
head.next=head.next.next.next  #moving the link between a-b to d
head.next.next.next=Temp1    #moving the link between d and c
head=Temp2

#print(head)
print("the new linkedlist")
point=head

while(point):
  print(point.val)
  point=point.next
The output is

the current linked list
a
b
c
d

the new linkedlist
b
a
c
d
 
Technology news on Phys.org
You have to avoid using any links that you've changed, either with careful ordering of operations and/or using temp pointers to avoid conflicts.

For example, if swapping two nodes in a linked list, if the nodes are adjacent, the next pointers are effectively rotated, but if the nodes are not adjacent, then two pairs of next pointers are swapped. This can be handled with common code by first swapping the external pointers to the two nodes, followed by swapping the nodes internal next pointers.

Given a list a->b->c->d->e->f, to swap b and e, swap(a->next, d->next), swap(b->next, e->next). To swap c and d, swap(b->next, c->next), swap(c->next, d->next).
 
  • Like
Likes FallenApple
Implement as a doubly linked list. In that data structure any given node knows who's it is attached to. Be very careful with the pointer manipulation or orphaned nodes (and thus memory leaks) will occur
 
  • Like
Likes FallenApple
Also make sure to test the link pointers for null so that the node is valid. Usually the "next" pointer is null to indicate there are no further nodes
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...

Similar threads

Replies
9
Views
3K
Replies
9
Views
3K
Replies
20
Views
6K
Replies
2
Views
3K
Replies
2
Views
1K
Replies
1
Views
3K
Back
Top