1 / 26

Linked Lists

Linked Lists. Midwestern State University CMPS 1053 Dr. Ranette Halverson. Basic LL Node. struct Node { int Num ; Node * Next; } Node *Head, *Temp;. Num Next. Traverse a Linked List (print). // Print each value of the list Temp = Head; while (Temp != NULL)

jguffey
Download Presentation

Linked Lists

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linked Lists Midwestern State University CMPS 1053 Dr. Ranette Halverson

  2. Basic LL Node struct Node { intNum; Node * Next; } Node *Head, *Temp; Num Next

  3. Traverse a Linked List (print) // Print each value of the list Temp = Head; while (Temp != NULL) { cout << Temp -> Num; Temp = Temp -> Next; }

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

  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?

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

  7. Remove Front Node From List if (Head != NULL) { Temp = Head; Head = Head -> Next; delete Temp; Temp = NULL; }

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

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

  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 <= Head -> 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)

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

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

  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 }

  14. Linked List Class struct Node { intNum; Node * Next; } class LinkList { Node *Head; public: // put functions here }

  15. Constructor LinkList ( ) { Head = NULL;}

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

  17. Remove From Front of List boolRemoveFront (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; } }

  18. Calls to Insert & Remove int main ( ) { LinkListMyList ( ); 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 ( ); }

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

  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?

  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.

  22. Code Changes??? • Every place that Num in a node is assigned, also need to assign last name & first name.

  23. Constructor – any changes needed? LinkList ( ) { Head = NULL;}

  24. Traverse to Print //Print each value of the list Temp = Head; while (Temp != NULL) { cout<< Temp-> Lname << Temp-> Fname<<Temp -> Num << endl; Temp = Temp -> Next; }

  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 <= Head -> 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 } }

  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?

More Related