交换单个链表的 2 个节点。我有程序。我要问哪里错了

Swap 2 nodes of a single linked list. i have the program. I need to ask where its wrong

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

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;