【发布时间】:2015-07-20 11:27:11
【问题描述】:
我需要以这种方式转换 DLL: 给定 n(节点数)和四个整数(a、b、c、d),表示两个区间 a、b 和 b、c。例如:
N: 7
Input list:
1 2 3 4 5 6 7
a,b = 2 3
c,d = 5 6
我需要做的是从给定的间隔交换节点,所以输出应该是这样的:
1 **5 6** 4 **2 3** 7
如您所见,元素 2 和 3 的节点与元素 5 和 6 交换了位置。
输入输入的其他方式可以是这样的:
N:5
Input: 10 50 40 25 1
a, b: 10 10
c, d: 40 1
Output: 40 25 1 50 10
这意味着间隔可以以相同的数字开始和结束。
编辑:请注意,间隔可以不同,即 a、b 可以有 3 个节点,而 c、d 可以有更多或更少,或相同数量的节点。
这是我到目前为止所做的。我只是取了给定的节点(a,b,c,d)后继者和前任者,但我需要以某种方式交换它们。这是函数的代码。
private static DLL<Integer> intervals(DLL<Integer> list, int a, int b, int c, int d) {
DLLNode<Integer> temp = lista.getFirst();
DLLNode<Integer> temp1;
DLLNode<Integer> temp2;
DLLNode<Integer> temp3;
DLLNode<Integer> temp4;
while(temp != null){
if(temp.element == a){
temp1 = temp.pred;
}
if(temp.element == b){
temp2 = temp.succ;
}
if(temp.element == c){
temp3 = temp.pred;
}
if(temp.element == d){
temp4 = temp.succ;
}
temp = temp.succ;
}
return list;
}
【问题讨论】:
-
如果
b - a > 1会发生什么?b - a = d - c有保证吗? -
this 是对函数应该做什么的正确解释吗?
-
我觉得你没看明白。间隔应该由元素值组成,而不是位置。
-
是的@Mauris,这是正确的