Download presentation
Presentation is loading. Please wait.
Published byWilliam Townsend Modified over 9 years ago
1
LINKED LISTS Midwestern State University CMPS 1053 Dr. Ranette Halverson 1
2
Basic LL Node struct Node {int Num; Node * Next; } Node *Head, *Temp; Num Next 2
3
Traverse a Linked List (print) // Print each value of the list Temp = Head; while (Temp != NULL) { cout Num; Temp = Temp -> Next; } 3
4
Insert Node to Front of List if (Head == Null) // empty list { Head = new Node; Head -> Num = VAL; Head -> Next = NULL; } else // not empty list {Temp = new Node; Temp -> Num = VAL; Temp -> Next = Head; Head = Temp; } 4
5
Insert Node to Front of List - Revisited Could we eliminate the first case (Head == NULL)? That is, does the second case work with an empty or non-empty list? 5
6
Insert Node to Front of List if (Head == Null) // Can we eliminate this case? { Head = new Node; Head -> Num = VAL; Head -> Next = NULL; } else // Test this for empty list: Head == Null {Temp = new Node; Temp -> Num = VAL; Temp -> Next = Head; Head = Temp; } 6
7
Remove Front Node From List if (Head != NULL) { Temp = Head; Head = Head -> Next; delete Temp; Temp = NULL; } 7
8
Insert Node to End of List Node *P, *C; // for previous & current if (Head == NULL) { } //Use insert to front code; else {P = Head; C=Head -> Next; While (C != NULL) // find end of list { P = C; C = C -> Next; } P -> Next = new Node; P -> Next -> Num = VAL; P -> Next -> Next = Null; } 8
9
Remove Last Node in List if (Head != NULL) // empty list else if (Head -> Next == NULL) //one Node in list { delete Head; Nead = Null; } else // find end of list having at least 2 Nodes { P = Head; C = Head -> Next; While (C -> Next != NULL) // C will point to last Node { P = C; C = C -> Next; } delete C; C = Null; P -> Next = NULL; } 9
10
Insert Node (Val) to Ordered List (ascending) Temp = new Node; Temp -> Num = Val; //Case 1: Empty list – use code to insert to front if (Head == NULL) { } //Case 2: Val is smaller than first Node – insert to front else if (Val Num) { } //Case 3: Find correct location within the list else { // need to write this code } //Considerations: Search list comparing Val to Nodes already in list AND watching for end of list (NULL) 10
11
Insert Node in Ordered List (p.2) //Case 3: Find correct location within the list { P = NULL; C = Head; while (C -> Next != Null && C-> Num < Val) //move down list { P = C; C = C -> Next;} // found location – don’t know which condition stopped the loop if (C -> Num >= Val) // Insert between P & C { Temp -> Next = C; P -> Next = Temp; } else // Insert after C { C -> Next = Temp; Temp->Next = NULL; } 11
12
Remove Node (Val) from Linked List if (Head == Null) { return false; } // empty list else if (Head ->Num == Val) // delete first node { Temp = Head; Head = Head -> Next; delete Temp; Temp = Null; return true; } 12
13
Remove Node (Val) from Linked List else // must find val in list { P=Null; C = Head; while (C -> Next != Null && C-> Num < Val) { P = C; C = C -> Next;} if ( C -> Num == Val) // remove node { P -> Next = C -> Next; delete C; C = Null; return true; } else { return false; } // val not in list } 13
14
Linked List Class struct Node {int Num; Node * Next; } class LinkList { Node *Head; public: // put functions here } 14
15
Constructor LinkList ( ) { Head = NULL;} 15
16
Insert to Front Function void InsertFront (int Val) { Node * Temp; if (Head == Null) // empty list { Head = new Node; Head -> Num = VAL; Head -> Next = NULL; } else // not empty list {Temp = new Node; Temp -> Num = VAL; Temp -> Next = Head; Head = Temp; } } 16
17
Remove From Front of List bool RemoveFront (int &Val) { if (Head == Null) // Empty list return false; else if (Head != NULL) { Val = Head -> Num; Temp = Head; Head = Head -> Next; delete Temp; Temp = NULL; return true; } 17
18
Calls to Insert & Remove int main ( ) { LinkList MyList ( ); int X = 5, Y = 10, Z; bool B; MyList.InsertFront(X); MyList.InsertFront(Y); B = MyList.RemoveFront (Z); if (B) cout << Z; // only print if actually removed MyList.PrintList ( ); } 18
19
NOW, YOU DEVELOP YOUR OWN LINKED LIST CLASS USING WHAT WE HAVE DONE IN CLASS!!! Test with your own data. Test all functions thoroughly!!! 19
20
Linked List Application Consider a linked list consisting of a person’s last & first names & age, ordered by age. Modify the struct Node What function do you call to insert a new person to the list? How does the code in other member functions change? 20
21
New struct struct Node {string Lname; string Fname; int Age; // Num Node * Next; } Does the order of the attributes matter? If we use Num (instead of Age) will have less code changes. 21
22
Code Changes??? Every place that Num in a node is assigned, also need to assign last name & first name. 22
23
Constructor – any changes needed? LinkList ( ) { Head = NULL;} 23
24
Traverse to Print //Print each value of the list Temp = Head; while (Temp != NULL) { cout Lname Fname Num << endl; Temp = Temp -> Next; } 24
25
Insert Ordered – (Val, LN, FN) Temp = new Node; Temp -> Num = Val; Temp -> Lname = LN; Temp -> Fname = FN; if (Head == NULL) { // insert to front code here } else if (Val Num) { // insert to front code here } else { P = NULL; C = Head; while (C -> Next != Null && C-> Num < Val) //move down list { P = C; C = C -> Next;} if (C -> Num >= Val) //insert between P & C { Temp -> Next = C; P -> Next = Temp; } else // Insert after C { C -> Next = Temp; Temp->Next = NULL } } 25
26
Question? What happens if there is a “Tie” in the ages? That is, if 2 people have the same age which one is first in the list? 26
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.