Skip to content

Latest commit

 

History

History
68 lines (54 loc) · 1.26 KB

find_middle_element_in_LinkedList.md

File metadata and controls

68 lines (54 loc) · 1.26 KB
import java.util.Optional;

public class LinkedListMiddleElement {

	public static void main(String[] args) {
		Element head = createList();
		Optional<String> middle = findMiddle(head);
		middle.ifPresent(System.out::println);
	}
	
	public static Optional<String> findMiddle(Element head){
		Element fastPointer = head;
		Element slowPointer = head;
		
		while(fastPointer.hasNext() && fastPointer.getNext().hasNext()) {
			fastPointer = fastPointer.getNext().getNext();
			slowPointer = slowPointer.getNext();
		}
		return Optional.ofNullable(slowPointer.getData());
	}

	// Creating list of 10 elements
	public static Element createList() {
		Element head = new Element("1");
		Element current = head;
		
		for(int i=2;i<=10;i++) {
			Element newNode = new Element(String.valueOf(i));
			current.setNext(newNode);
			current = newNode;
		}
		return head;
	}
}

class Element {
	private String data;
	private Element next;

	public String getData() {
		return data;
	}

	public void setData(String data) {
		this.data = data;
	}

	public Element getNext() {
		return next;
	}

	public void setNext(Element next) {
		this.next = next;
	}

	public Element(String data) {
		super();
		this.data = data;
		this.next = null;
	}

	public boolean hasNext() {
		return next != null;
	}

}