Код: Выделить всё
public void question1(int key1,int key2){
//swapping keys by changing links not data:
Node temp = Head;
Node tempStr1 = null;
Node nextStr1=null,NextStr2=null;
Node tempstr2 = null;
while(temp.Next!=null){
if(temp.Next.data==key1){
nextStr1=temp.Next.Next;
tempStr1 = temp.Next;
}
if(temp.Next.data==key2){
NextStr2 = temp.Next.Next;
tempstr2 = temp.Next;//storing in temp var
}
temp=temp.Next;//update
}
while(temp.Next!=null){
if(temp.Next.data==key1){
temp.Next = tempstr2;
tempstr2.Next = nextStr1;
}
if(temp.Next.data==key2){
temp.Next = tempStr1;//swap
tempStr1.Next = NextStr2;
}
temp=temp.Next;//update
}
}
}
public static void main(String args[]){
LinkedList ll = new LinkedList();
ll.addFirst(1);
ll.addFirst(2);
ll.addFirst(3);
ll.addFirst(4);
ll.addFirst(5);
ll.addFirst(6);
ll.Print();
ll.question1(3, 2 );
ll.Print();
Цель состоит в том, чтобы поменять местами два узла, просто изменив ссылки.
Ожидаемый результат: 6 5 4 2 3 1
Реальный результат: 6 5 4 3 2 1
Этот код для этого вопроса:
Замена узлов в связанном списке
У нас есть связанный список и два ключи в нем, поменяйте узлы местами для двух заданных ключей. Узлы следует менять местами, меняя ссылки. Обмен данными узлов может оказаться дорогостоящим во многих ситуациях, когда данные содержат много полей. Можно предположить, что все ключи в связанном списке различны.
Подробнее здесь: https://stackoverflow.com/questions/749 ... ect-result
Мобильная версия