切换链表中的值(处理节点)

时间:2014-03-06 04:11:21

标签: java linked-list nodes

我正在编写一种方法来切换链表中的一对值。

例如,我的列表包含:

1, 4, 5, 8, 9, 3

在方法调用之后,列表应包含:

4, 1, 8, 5, 3, 9

处理链表只会让我感到困惑,只使用节点,我不明白为什么我的代码只切换列表中的前2个值。有任何想法吗?多一点解释会很棒。谢谢。

public void switchPairs() {
    ListNode current = front;
    ListNode temp = front.next;
    while(current.next != null) {
        int i = front.data;
        front.data = front.next.data;
        front.next.data = i;

        current = current.next;
    }
}

2 个答案:

答案 0 :(得分:2)

将您的ListNode变量名称更改为firstsecond,以便更轻松地发现问题。您没有正确交换,也没有正确地迭代ListNodes。你必须用2迭代。

public void switchPairs() {
    ListNode first = front;//first node in pair
    ListNode second = front.next;//second node in pair

    //while the both nodes are not null
    while(first != null && second != null) {
        int i = first.data;//put first value in temp value
        first.data = second.data;//put second value in first node
        second.data = i;//put temp value (first value) in second node

        //NOTE:  do some null pointer checks here just in case
        first = second.next;//iterate first node
        second = second.next.next;//iterate second node
    }
}

答案 1 :(得分:1)

这是因为你没有改变前面的价值。前面总是在第一个和第二个数字之间改变。但是当电流最初设置为前置时,每次当前值递增直到达到最后一个值