package com.interview.linklist;
/**
* http://www.geeksforgeeks.org/given-linked-list-line-segments-remove-middle-points/
* @author tusroy
* Test cases:
* 0 or more nodes
* All points are edge of line segments so nothing gets removed
* One long line so all points in between get removed
*
*/
class Point{
int x;
int y;
Point(int x, int y){
this.x = x;
this.y = y;
}
}
public class RemoveMiddleElementsOfLineSegment {
public void remove(Node head){
if(head == null || head.next == null){
return;
}
Node curr = head;
Node next = head.next;
Node nextNext = head.next.next;
while(nextNext != null){
Point pcurr = (Point)curr.obj;
Point pnext = (Point)nextNext.obj;
if(pcurr.x == pnext.x || pcurr.y == pnext.y){
curr.next = nextNext;
next = nextNext;
nextNext = nextNext.next;
}else{
curr = curr.next;
next = next.next;
nextNext = nextNext.next;
}
}
}
public static void main(String args[]){
Node head1 = null;
LinkList ll = new LinkList();
head1 = ll.addNode(1, head1, new Point(0,10));
head1 = ll.addNode(2, head1, new Point(1,10));
head1 = ll.addNode(3, head1, new Point(5,10));
head1 = ll.addNode(4, head1, new Point(7,10));
head1 = ll.addNode(5, head1, new Point(7,5));
head1 = ll.addNode(6, head1, new Point(20,5));
head1 = ll.addNode(7, head1, new Point(40,5));
head1 = ll.addNode(8, head1, new Point(40,8));
RemoveMiddleElementsOfLineSegment rme = new RemoveMiddleElementsOfLineSegment();
rme.remove(head1);
ll.printList(head1);
}
}