Design Singly Linked List

Let's briefly review the structure definition of a node in the singly linked list.

// Definition for singly-linked list.
public class SinglyListNode {
    int val;
    SinglyListNode next;
    SinglyListNode(int x) { val = x; }
}

Based on this definition, we are going to give you the solution step by step.

1. Initiate a new linked list: represent a linked list using the head node.

class MyLinkedList {
    private SinglyListNode head;
    /** Initialize your data structure here. */
    public MyLinkedList() {
        head = null;
    }
}

2. Traverse the linked list to get element by index.

/** Helper function to return the index-th node in the linked list. */
private SinglyListNode getNode(int index) {
    SinglyListNode cur = head;
    for (int i = 0; i < index && cur != null; ++i) {
        cur = cur.next;
    }
    return cur;
}
/** Helper function to return the last node in the linked list. */
private SinglyListNode getTail() {
    SinglyListNode cur = head;
    while (cur != null && cur.next != null) {
        cur = cur.next;
    }
    return cur;
}
/** Get the value of the index-th node in the linked list. If the index is invalid, return -1. */
public int get(int index) {
    SinglyListNode cur = getNode(index);
    return cur == null ? -1 : cur.val;
}

3. Add a new node.

It is worth noting that we have to get the(index - 1)th node or the last node before we add the new node (except adding at the head) and it takesO(N)time to get a node by index, whereNis the length of the linked list. It is different from adding a new node after a given node.

5. Delete a node.

Similar to the add operation, it takesO(N)time to get the node by the index which is different from deleting a given node. However, even if we already get the node we want to delete, we still have to traverse to get its previous node.

Last updated

Was this helpful?