public class BubbleSwapList { private class Node { public final E element; public Node next; public Node previous; public Node(E element) { this.element = element; this.next = null; this.previous = null; } } private Node head; public BubbleSwapList() { head = null; } public void add(E element) { Node toAdd = new Node(element); if (head != null) head.previous=toAdd; toAdd.next = head; head = toAdd; } public String toString() { StringBuilder sb = new StringBuilder(); sb.append("[ "); Node curr = head; while (curr!=null) { sb.append(curr.element); sb.append(" "); curr=curr.next; } sb.append("]"); return sb.toString(); } public void bubble(E e) { Node curr = head; while (!curr.element.equals(e)) { curr=curr.next; } if (curr==null) { return; } // want to swap curr with curr.next; if (curr.next==null) { return; } Node nxt = curr.next; if (nxt.next !=null) { nxt.next.previous=curr; } if (curr.previous!=null) { curr.previous.next = nxt; } curr.next = nxt.next; nxt.next = curr; nxt.previous=curr.previous; curr.previous=nxt; if (curr==head) head=nxt; } public static void main(String[] args) { BubbleSwapList bsl = new BubbleSwapList<>(); for (int i=0; i<10; i++) bsl.add(i); System.out.println(bsl); bsl.bubble(9); System.out.println(bsl); } }