exercises for help with exercisesplease visit the sitewww wiley com/college/goodrich reinforcement - give an algorithm for finding the second-to-last node in singly linked list in which the last node is indicated by next reference of none - describe good algorithm for concatenating two singly linked lists and mgiven only references to the first node of each listinto single list that contains all the nodes of followed by all the nodes of - describe recursive algorithm that counts the number of nodes in singly linked list - describe in detail how to swap two nodes and (and not just their contentsin singly linked list given references only to and repeat this exercise for the case when is doubly linked list which algorithm takes more timer- implement function that counts the number of nodes in circularly linked list - suppose that and are references to nodes of circularly linked listsalthough not necessarily the same list describe fast algorithm for telling if and belong to the same list - our circularqueue class of section provides rotatemethod that has semantics equivalent to enqueue( dequeue))for nonempty queue implement such method for the linkedqueue class of section without the creation of any new nodes - describe nonrecursive method for findingby link hoppingthe middle node of doubly linked list with header and trailer sentinels in the case of an even number of nodesreport the node slightly left of center as the "middle (notethis method must only use link hoppingit cannot use counter what is the running time of this methodr- give fast algorithm for concatenating two doubly linked lists and mwith header and trailer sentinel nodesinto single list - there seems to be some redundancy in the repertoire of the positional list adtas the operation add first(ecould be enacted by the alternative add before( first)elikewisel add last(emight be performed as add after( last)eexplain why the methods add first and add last are necessary