Skip to main content

Delete a node from the end of doubly linked list in swift

Swift program for Delete a node from the end of doubly linked list. Here problem description and other solutions.

import Foundation
// Swift 4 program for
// Delete a node from the end of doubly linked list
class LinkNode
{
	var data: Int;
	var next: LinkNode? ;
	var prev: LinkNode? ;
	init(_ data: Int)
	{
		self.data = data;
		self.next = nil;
		self.prev = nil;
	}
}
class DoublyLinkedList
{
	var head: LinkNode? ;
	var tail: LinkNode? ;
	init()
	{
		self.head = nil;
		self.tail = nil;
	}
	// Insert new node at end position
	func insert(_ value: Int)
	{
		// Create a node
		let node: LinkNode = LinkNode(value);
		if (self.head == nil)
		{
			// Add first node
			self.head = node;
			self.tail = node;
			return;
		}
		// Add node at last position
		self.tail?.next = node;
		node.prev = self.tail;
		self.tail = node;
	}
	// Display node element of doubly linked list
	func display()
	{
		if (self.head == nil)
		{
			print("Empty Linked List");
		}
		else
		{
			print("\nLinked List Head to Tail :");
			// Get first node of linked list
			var temp: LinkNode? = self.head;
			// iterate linked list 
			while (temp  != nil)
			{
				// Display node value
				print("",temp!.data, terminator: " ");
				// Visit to next node
				temp = temp!.next;
			}
		}
	}
	// Remove the given node from end of linked list
	func deletionFromEnd(_ key: Int)
	{
		if (self.head == nil)
		{
			// Empty linked list
			return;
		}
		var auxiliary: LinkNode? = nil;
		var temp: LinkNode? = self.tail;
		// Find the deleted node
		while (temp  != nil && auxiliary == nil)
		{
			if (temp!.data == key)
			{
				// We found deleted node
				auxiliary = temp;
			}
			// Visit to previous node
			temp = temp!.prev;
		}
		if (auxiliary  != nil)
		{
			// When we get deleted node
			if (auxiliary!.prev  != nil)
			{
				// When previous node present
				auxiliary!.prev!.next = auxiliary!.next;
			}
			if (auxiliary!.next  != nil)
			{
				// When next node present
				auxiliary!.next!.prev = auxiliary!.prev;
			}
			if (self.head === auxiliary)
			{
				// When delete head node
				self.head = self.head!.next;
			}
			if (auxiliary === self.tail)
			{
				// When delete last node
				self.tail = self.tail!.prev;
			}
			auxiliary = nil;
		}
		else
		{
			print("\nNode not exist "
				+ String(key));
		}
	}
	static func main(_ args: [String])
	{
		let dll: DoublyLinkedList = DoublyLinkedList();
		// Insert following linked list nodes
		dll.insert(1);
		dll.insert(2);
		dll.insert(9);
		dll.insert(4);
		dll.insert(5);
		dll.insert(2);
		dll.insert(7);
		dll.insert(9);
		print("\nBefore Delete", terminator: "");
		dll.display();
		let key: Int = 2;
		dll.deletionFromEnd(key);
		print("\nAfter Delete Node "
			+ String(key), terminator: "");
		dll.display();
	}
}
DoublyLinkedList.main([String]());

Output

Before Delete
Linked List Head to Tail :
 1  2  9  4  5  2  7  9
After Delete Node 2
Linked List Head to Tail :
 1  2  9  4  5  7  9




Comment

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