Well, you just need some way to distinguish the end of the list. This can either be that the link of the last node returns null, or you can put a special end-of-list node to the end of your list. Iterating through a linked list is as simple as creating a node to point to the head, then simply update that node to be node.link
// iterate through the list, printing out the data
ListNode iterator = head;
while (head.link != null)
{
System.out.println(iterator.data);
iterator = iterator.link;
}
If you haven't done so already, implement a equals() method to whatever data it is you're putting into your nodes. Then modify the above code to have an if statement that will check if iterator's data is equal to a held node's data.
Once you have this figured out, changing the held node is as simple as duplicating the above loop code, except move the held node's reference rather than the iterator's, and put everything for the iterator inside of this new bigger loop.