交换单个链表的 2 个节点.我有程序.我需要问它错在哪里



我写了下面的程序。如果我调试它,交换工作正常。但是我无法返回完整的链表。它也在改变头部。怎么了?

public static Node<Integer> swapElementsAtiAndj(Node<Integer> head, int i, int j)
{
    Node<Integer> temp= head;
    Node<Integer> prev1  = temp;
    Node<Integer> prev2  = temp;
    Node<Integer> toSwap1  = temp;
    Node<Integer> toSwap2  = temp;
    int count =0;
    int pos1 =i;
    int pos2 =j;
    if(i>j) {
        pos1 = j;
        pos2 =i;
    }
    while (count !=pos1) {
        prev1 = toSwap1;
        toSwap1 = toSwap1.next;
        prev2 = prev1;
        toSwap2 = toSwap1;
        count++;
    }
    while(count != pos2) {
        prev2 = toSwap2;
        toSwap2 = toSwap2.next;
        count++;
    }
    temp.data = toSwap1.data;
    temp.next = toSwap2.next;
    toSwap2.next = toSwap1.next;
    prev2.next = temp;
    prev1.next = toSwap2;

    return head;
}
是的

,您的head正在修改

temp.next = toSwap2.next;

因为temp指向head.以下是您可以解决它的方法:
首先

prev2 = prev1;
toSwap2 = toSwap1;

可以在循环while之外写入。

现在,在第二次循环while之后,toSwap1toSwap2指向要交换的元素。

// Swap prev
prev1.next = toSwap2;
prev2.next = toSwap1;
// Store toSwap2's next in temp
temp = toSwap2.next;
// Set toSwap2's next to toSwap1's next
toSwap2.next = toSwap1.next;
// Set toSwap1's next to old toSwap2's next (i.e temp)
toSwap1.next = temp;
// Return
return head;

相关内容

  • 没有找到相关文章

最新更新