Deleting the head node of a circular linked list Today I tackled this coding challenge: 


  Given a circular linked list, implement a method to delete its head node. Return the list's new head node.


I would appreciate any feedback.

public ListNode deleteAtHead(ListNode head) {

    if(head == null){
        return head;
    }   
    ListNode temp = head;

    while(temp.next != head){
        temp = temp.next;
    }

    temp.next = head.next;
    head.next = null;
    head = temp.next;

   return head;
}
Since you are dealing with a circularly linked list (meaning the tail's next points to head and the head's prev points to the tail) and assuming each node has a prev and next, you might consider this easier approach which does not require traversal of the entire list.

public ListNode deleteAtHead(ListNode head) {
    if (head == null) {
        return head;
    }

    ListNode newHead = head.next;
    newHead.prev = head.prev;
    head.prev.next = newHead;

    head.next = null;
    head.prev = null;

    return newHead;
}


This should also work for a list with only 1 node (e.g. a head) assuming it is initialized with prev and next referencing itself.