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; |