Как заменить первый узел на последний узел в связанном списке Java

Привет, я хочу заменить первый узел на последний узел и последний узел на первый узел

это мой код, но что-то не так: любая помощь?

public void replaceNode() {

    Node firstNode = head.next;
    Node lastNode = null;

    location = head;
    while (head != null) {
        location = location.next;
        predLocation = location;
        lastNode = location;
    }

    head.next = lastNode;
    lastNode.next = head.next.next;

    firstNode.next = null;
    predLocation.next = firstNode;

}

2 ответа

Просто вы можете изменить значение между двумя узлами, не меняя там ссылку. Если это неизменяемое, то, возможно, вы можете использовать приведенный ниже код.

public void replaceNode(ListNode head) {
            ListNode firstNode = head.next;
            ListNode tempNode = head;
            ListNode preLastNode = null;
            while(tempNode.next !=null) {
                preLastNode=tempNode;
                tempNode=tempNode.next;
            }
            head.next=preLastNode.next;
            head.next.next=firstNode.next;
            preLastNode.next=firstNode;
            preLastNode.next.next=null;
        }

Попробуйте ниже простой код..

import java.util.Scanner;

public class swapHeadTail{

static llistNode insert(llistNode H,int data){
    llistNode tmp = new llistNode();
    tmp.data=data;
    tmp.next=null;
    if(H==null)
        return tmp;
    llistNode curr = new llistNode();
    curr = H;
    while(curr.next != null)
        curr = curr.next;
    curr.next = tmp;
    return H;
}

public static void main(String[] args) {
    llistNode H = new llistNode();
    Scanner in = new Scanner(System.in);
    llistNode tmp =new llistNode();

    H=null;
    do{
        System.out.print("Enter data:");
        H=insert(H,in.nextInt());
        System.out.print("Enter 1 to continue: ");
    }while (in.nextInt()==1);

    tmp = H;
    while(tmp != null){
        System.out.print(tmp.data+"\t");
        tmp = tmp.next;
    }
    System.out.println();

    llistNode head = new llistNode();
    llistNode headNext = new llistNode();
    llistNode tailPrev = new llistNode();
    llistNode tail = new llistNode();

    head = H;
    headNext = H.next;
    tailPrev = H;
    while(tailPrev.next.next != null)
        tailPrev=tailPrev.next;
    tail = tailPrev.next;
    if ((tailPrev == head)&&(headNext == tail)){
        head.next = null;
        tail.next = head;
    }
    else{
        tmp = head;
        tmp.next = null;
        tailPrev.next = tmp;
        tail.next=headNext;
    }
    H=tail;
    tmp = H;
    while(tmp != null){
        System.out.print(tmp.data+"\t");
        tmp = tmp.next;
    }

  }
 }

ссылка: http://rawjava.blogspot.in/2015/04/java-program-to-swap-head-and-tail-of.html

Другие вопросы по тегам