我正在编写一种方法来切换链表中的一对值。
例如,我的列表包含:
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;
}
}
答案 0 :(得分:2)
将您的ListNode
变量名称更改为first
和second
,以便更轻松地发现问题。您没有正确交换,也没有正确地迭代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)
这是因为你没有改变前面的价值。前面总是在第一个和第二个数字之间改变。但是当电流最初设置为前置时,每次当前值递增直到达到最后一个值