Delete a node from linked list specific position in php

Php program for Delete a node from linked list specific position. Here problem description and explanation.

<?php
// Php Program for
// Delete node at given index of linked list

// Linked list node
class LinkNode
{
	public $data;
	public $next;
	public	function __construct($data)
	{
		$this->data = $data;
		$this->next = NULL;
	}
}
class SingleLL
{
	public $head;
	public $tail;
	public	function __construct()
	{
		$this->head = NULL;
		$this->tail = NULL;
	}
	// Add new node at the end of linked list
	public	function addNode($value)
	{
		// Create a new node
		$node = new LinkNode($value);
		if ($this->head == NULL)
		{
			$this->head = $node;
		}
		else
		{
			$this->tail->next = $node;
		}
		$this->tail = $node;
	}
	// Display linked list element
	public	function display()
	{
		if ($this->head == NULL)
		{
			return;
		}
		$temp = $this->head;
		// iterating linked list elements
		while ($temp != NULL)
		{
			printf("%d → ", $temp->data);
			// Visit to next node
			$temp = $temp->next;
		}
		printf("%s\n", "NULL");
	}
	// Delete node at given position
	public	function deleteAtIndex($index)
	{
		$temp = $this->head;
		if ($this->head == NULL)
		{
			printf("Empty linked list\n");
			return;
		}
		else if ($index < 0)
		{
			printf("Invalid positions\n");
			return;
		}
		else if ($index == 1)
		{
			// Means deleting a first node
			if ($this->tail == $this->head)
			{
				// Only one node
				$this->tail = NULL;
			}
			// Make second node as head
			$this->head = $this->head->next;
		}
		else
		{
			$count = $index - 1;
			// iterating linked list elements and find deleted node
			while ($temp != NULL && $count > 1)
			{
				// Visit to next node
				$temp = $temp->next;
				$count--;
			}
			if ($count == 1 && $temp->next != NULL)
			{
				// Get deleted node
				$n = $temp->next;
				if ($n == $this->tail)
				{
					// When delete last node
					$this->tail = $temp;
				}
				// Unlink the deleting node
				$temp->next = $n->next;
			}
			else
			{
				printf(" Index ".$index.
					" are not present\n");
				return;
			}
		}
	}
	public static
	function main($args)
	{
		$sll = new SingleLL();
		// Test with your index
		// Note index start with 1
		$index = 5;
		// Linked list
		// 10 → 20 → 30 → 40 → 50 → 60 → 70 → 80 → NULL
		$sll->addNode(10);
		$sll->addNode(20);
		$sll->addNode(30);
		$sll->addNode(40);
		$sll->addNode(50);
		$sll->addNode(60);
		$sll->addNode(70);
		$sll->addNode(80);
		printf(" Before Delete Linked List\n");
		$sll->display();
		// Delete node at 5-th position
		$sll->deleteAtIndex($index);
		// Display linked list
		printf("After Delete Linked List\n");
		$sll->display();
	}
}

SingleLL::main(array());

Output

 Before Delete Linked List
10 → 20 → 30 → 40 → 50 → 60 → 70 → 80 → NULL
After Delete Linked List
10 → 20 → 30 → 40 → 60 → 70 → 80 → NULL


Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment







© 2021, kalkicode.com, All rights reserved