head
+--------+ +--------+ -->+--------+ -->+--------+
| |---->| info1 | / | info2 | / | info3 |
+--------+ | | / | | / | |
+--------+ / +--------+ / +--------+
| ref1 |- | ref2 |- | null |
+--------+ +--------+ +--------+
And you have a linked list element at "elem":
elem
+--------+ +--------+
| |---->| infoX | (information has been filled in)
+--------+ | |
+--------+
| ???? | (don't care, because we know there
+--------+ is no "next" element)
Memory:
+---------------+
head: | 8000 |-------------------------------+
+---------------+ |
| | |
....... |
....... |
+---------------+ |
8000 | info1 | Linked list element 1 <-----+
+---------------+
| ref1=10000 |-------------------------------------+
+---------------+ |
| | |
+---------------+ |
....... |
....... |
+---------------+ |
9000 | info3 | Linked list element 3 <----+ |
+---------------+ | |
| ref3=0 (null) | | |
+---------------+ | |
....... | |
....... | |
+---------------+ | |
10000 | info2 | Linked list element 2 | <-----+
+---------------+ |
| ref2=9000 |-----------------------------+
+---------------+
.......
.......
+---------------+
elem: | 20000 |-----------------------------+
+---------------+ |
....... |
....... |
+---------------+ |
20000 | infoX | New linked list element <---+
+---------------+
| refX=???? |
+---------------+
This process is illustrated by the following diagram:
Before insertion:
head
+--------+ +--------+ -->+--------+ -->+--------+
| |---->| info1 | / | info2 | / | info3 |
+--------+ | | / | | / | |
+--------+ / +--------+ / +--------+
| ref1 |- | ref2 |- | null |
+--------+ +--------+ +--------+
elem
+--------+ +--------+
| |---->| infoX |
+--------+ | |
+--------+
| ???? |
+--------+
After insertion:
head
+--------+ +--------+ -->+--------+ -->+--------+
| |---->| info1 | / | info2 | / | info3 |
+--------+ | | / | | / | |
+--------+ / +--------+ / +--------+
| ref1 |- | ref2 |- | ref3 |--+
+--------+ +--------+ +--------+ |
elem |
+--------+ +--------+ |
| |---->| infoX |<-----------------------------------+
+--------+ | |
+--------+
| null |
+--------+
Memory:
+---------------+
head: | 8000 |-------------------------------+
+---------------+ |
| | |
....... |
....... |
+---------------+ |
8000 | info1 | Linked list element 1 <-----+
+---------------+
| ref1=10000 |-------------------------------------+
+---------------+ |
| | |
+---------------+ |
....... |
....... |
+---------------+ |
9000 | info3 | Linked list element 3 <----+ |
+---------------+ | |
| ref3=20000 |-----------------------------|---+ |
+---------------+ | | |
....... | | |
....... | | |
+---------------+ | | |
10000 | info2 | Linked list element 2 | <-----+
+---------------+ | |
| ref2=9000 |-----------------------------+ |
+---------------+ |
....... |
....... |
+---------------+ |
elem: | 20000 |-----------------------------+ |
+---------------+ | |
....... | |
....... | |
+---------------+ | |
20000 | infoX | New linked list element <---+---+
+---------------+
| refX=null |
+---------------+
This address (20000) is also the address of the list element pointed to by "elem"
We must make a distinction between inserting into an empty list and a non-empty list....
elem.next = null; head = elem; (new head)
ptr = "Find the last element in the list at head"; ptr.next = elem; elem.next = null; (head remains unchanged)
static ListElement Insert(ListElement head, ListElement newelem)
{
ListElement ptr; // local variable to run down the list
if (head == null)
{ // Empty list, make "newelem" the first element
newelem.next = null; // Mark last element
return(newelem);
}
else
{ // find the last element
ptr = head;
while (ptr.next != null)
ptr = ptr.next;
ptr.next = newelem; // Link new to the last element
newelem.next = null; // Mark last element
return(head);
}
}
|
This function will return the head of the new list (with the "newelem" inserted.
But I will show you the code -- you can study it on your own.
The following program fragment shows how to use this function:
ptr = new ListElement(); // Create a new list element .... (initialize the list element) head = Insert(head, ptr); // Insert new element into list |
ListELement ptr; ptr = new ListElement(); // Create a new list element |
Recall that the new operator will:
|
|
Java: ListELement ptr; ptr = new ListElement(); ptr.value = 1234; |