CSE 143 Lecture 10 - PowerPoint PPT Presentation

About This Presentation
Title:

CSE 143 Lecture 10

Description:

{ System.out.println(a[i]); i ; 6. A LinkedIntList class. Let's write a class named ... The add method (2) // Inserts the given value at the given index. ... – PowerPoint PPT presentation

Number of Views:16
Avg rating:3.0/5.0
Slides: 22
Provided by: Marty115
Category:
Tags: cse | lecture | method

less

Transcript and Presenter's Notes

Title: CSE 143 Lecture 10


1
CSE 143Lecture 10
  • Linked List Basics
  • reading 16.1 - 16.2
  • slides created by Marty Stepp
  • http//www.cs.washington.edu/143/

2
Linked node question
  • Suppose we have a long chain of list nodes
  • How would we write code to print the data values
    in all the nodes in order without redundancy?

data next
10
data next
990
data next
20
list
...
3
Algorithm pseudocode
  • Start at the front of the list.
  • While (there are more nodes to print)
  • Print the current node's data.
  • Go to the next node.
  • How do we walk through the nodes of the list?
  • list list.next // is this a good idea?

data next
10
data next
990
data next
20
list
...
4
A "current" reference
  • Important A ListNode variable is NOT a ListNode
    object!
  • ListNode current list
  • Move along a list by advancing a ListNode
    reference.
  • current current.next

data next
10
data next
990
data next
20
list
...
current ???
5
Printing algorithm
  • Algorithm to print all list nodes
  • ListNode front ...
  • ListNode current front
  • while (current ! null)
  • System.out.println(current.data)
  • current current.next
  • Similar to array code
  • int a ...
  • int i 0
  • while (i lt a.length)
  • System.out.println(ai)
  • i

6
A LinkedIntList class
  • Let's write a class named LinkedIntList.
  • Has the same methods as ArrayIntList
  • add, add, get, indexOf, remove, size, toString
  • The list is internally implemented as a chain of
    linked nodes
  • The LinkedIntList keeps a reference to its front
    as a field
  • null is the end of the list a null front
    signifies an empty list

ListNode
ListNode
ListNode
LinkedIntList
data next
42
data next
-3
data next
17
front size 3
element 0
element 1
element 2
7
LinkedIntList class v1
  • public class LinkedIntList
  • private ListNode front
  • private int size
  • public LinkedIntList()
  • front null
  • size 0
  • methods go here

LinkedIntList
front size 0
8
Implementing add
  • // Adds the given value to the end of the list.
  • public void add(int value)
  • ...
  • How do we add a new node to the end of a list?
  • Does it matter what the list's contents are
    before the add?

data next
42
data next
-3
data next
17
front size 3
element 0
element 1
element 2
9
Adding to an empty list
  • Before adding 20 After
  • We must create a new node and attach it as the
    front of the list.

data next
20
front size 0
front size 1
element 0
10
Adding to non-empty list
  • Before adding value 20 to end of list
  • After

data next
42
data next
-3
front size 2
element 0
element 1
data next
42
data next
-3
data next
20
front size 3
element 0
element 1
element 2
11
Don't fall off the edge!
  • To add/remove from a list, you must modify the
    next reference of the node before the place you
    want to change.
  • Where should current be pointing, to add 20 at
    the end?
  • What loop test will stop us at this place in the
    list?

data next
42
data next
-3
front size 2
element 0
element 1
12
The add method
  • // Adds the given value to the end of the list.
  • public void add(int value)
  • if (front null)
  • // adding to an empty list
  • front new ListNode(value)
  • else
  • // adding to the end of an existing list
  • ListNode current front
  • while (current.next ! null)
  • current current.next
  • current.next new ListNode(value)
  • size

13
Implementing get
  • // Returns value in list at given index.
  • public int get(int index)
  • ...
  • Exercise Implement the get method.

data next
42
data next
-3
data next
17
front size 3
element 0
element 1
element 2
14
The get method
  • // Returns value in list at given index.
  • // Precondition 0 lt index lt size()
  • public int get(int index)
  • ListNode current front
  • for (int i 0 i lt index i)
  • current current.next
  • return current.data

15
Implementing add (2)
  • // Inserts the given value at the given index.
  • public void add(int index, int value)
  • ...
  • Exercise Implement the two-parameter add method.

data next
42
data next
-3
data next
17
front size 3
element 0
element 1
element 2
16
The add method (2)
  • // Inserts the given value at the given index.
  • // Precondition 0 lt index lt size()
  • public void add(int index, int value)
  • if (index 0)
  • // adding to an empty list
  • front new ListNode(value, front)
  • else
  • // inserting into an existing list
  • ListNode current front
  • for (int i 0 i lt index - 1 i)
  • current current.next
  • current.next new ListNode(value,

  • current.next)
  • size

17
Implementing remove
  • // Removes value at given index from list.
  • public void remove(int index)
  • ...
  • How do we remove a node from a list?
  • Does it matter what the list's contents are
    before the remove?

data next
42
data next
-3
data next
17
front size 3
element 0
element 1
element 2
18
Removing from a list
  • Before removing element at index 1
  • After

data next
42
data next
-3
data next
20
front size 3
element 0
element 1
element 2
data next
42
data next
20
front size 2
element 0
element 1
19
Removing from the front
  • Before removing element at index 0
  • After

data next
42
data next
-3
data next
20
front size 3
element 0
element 1
element 2
data next
-3
data next
20
front size 2
element 0
element 1
20
Removing the only element
  • Before After
  • We must change the front field to store null
    instead of a node.
  • Do we need a special case to handle this?

data next
20
front size 0
front size 1
element 0
21
The remove method
  • // Removes value at given index from list.
  • // Precondition 0 lt index lt size()
  • public void remove(int index)
  • if (index 0)
  • // special case removing first element
  • front front.next
  • else
  • // removing from elsewhere in the list
  • ListNode current front
  • for (int i 0 i lt index - 1 i)
  • current current.next
  • current.next current.next.next
  • size--
Write a Comment
User Comments (0)
About PowerShow.com