π‘ Problem Formulation: Circular linked lists are a type of data structure with a sequence of nodes connected in a loop. The challenge lies in deleting a node from the end of such a structure without standard endpoints. The input would be a circular linked list with an integer value in each node, and the output would be the modified list without the last node.
Method 1: Two-Pointer Technique
The two-pointer technique involves using two pointers that traverse the linked list at different speeds. This method’s core idea is to maintain a gap between the two pointers such that when the faster pointer reaches the end, the slower pointer is just in front of the node to be deleted.
β₯οΈ Info: Are you AI curious but you still have to create real impactful projects? Join our official AI builder club on Skool (only $5): SHIP! - One Project Per Month
Here’s an example:
class Node:
def __init__(self, data):
self.data = data
self.next = None
def delete_last_node(head):
if head is None or head.next is head:
return None
slow = head
fast = head
while fast.next is not head and fast.next.next is not head:
slow = slow.next
fast = fast.next.next
slow.next = slow.next.next
return head
# Sample circular linked list creation and deletion
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)
head.next.next.next = head
head = delete_last_node(head)Output: The circular linked list will now be 1 -> 2 -> 1, with the third node deleted.
In this code snippet, we define a Node class and a function to delete the last node from a circular linked list. We use two pointers: slow and fast. As fast moves twice the steps of slow, we can ensure that when fast reaches the end, slow is right before the last node, allowing us to skip over the last node, thus deleting it.
Summary/Discussion
- Method 1: Two-Pointer Technique. This method is efficient as it traverses the list only once. However, it can be less intuitive for those unfamiliar with this approach and requires careful handling of pointers to avoid errors.
