1
\$\begingroup\$

Write a method transferFrom that accepts a second LinkedIntList as a parameter and that moves values from the second list to this list. You are to attach the second list's elements to the end of this list. You are also to empty the second list. For example, suppose two lists store these sequences of values:

list1: [8, 17, 2, 4] list2: [1, 2, 3] The call of list1.transferFrom(list2); should leave the lists as follows:

list1: [8, 17, 2, 4, 1, 2, 3] list2: [] The order of the arguments matters; list2.transferFrom(list1); would have left the lists as follows:

list1: [] list2: [1, 2, 3, 8, 17, 2, 4] Either of the two lists could be empty, but you can assume that neither list is null. You are not to create any new nodes. Your method should simply change links of the lists to join them together.

Assume that you are adding this method to the LinkedIntList class as defined below:

public class LinkedIntList { private ListNode front; // null for an empty list ... }

It is also worth noting that this is based on a custom implementation called LinkedIntList, which you can find here.

I'd like to get some general feedback for writing using the calling method vs the called (am I doing this right?) I was a bit confused when writing this code, and felt like I had to hardcode too many edge-cases. This might result in some bugs I don't currently see. I hope that this code can be simplified so that I can better understand it for future problems.

public LinkedIntList transferFrom(LinkedIntList list) {
    if (list.front != null) {
        if (this.front == null) {
            this.front = list.front;
            list.front = null;
        } else {
            boolean isConcated = false;
            for (ListNode p = this.front; p != null; p = p.next) {
                if (p.next == null && !isConcated) {
                    p.next = list.front;
                    isConcated = true;
                    list.front = null;
                }
            }
        }
    }
    return this;
}
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.