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?