Reverse-Rechte Hälfte einer verknüpften Liste

reverse zweiten Hälfte linkedlist

Beispiel:

auch die Anzahl:
2->1->3->4->5->6->7->8 =====> 2->1->3->4->8->7->6->5 ;

ungerade Zahl: 5->7->8->6->3->4->2 ======> 5->7->8->2->4->3->6, die
mittlere müssen auch rückgängig gemacht werden

class ListNode
{
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}


class ReverseRightHalfLinkedList 
{
    public static void main(String[] args) 
    {       
        ListNode node1 = new ListNode(1);
        ListNode node2 = new ListNode(2);
        ListNode node3 = new ListNode(3);
        ListNode node4 = new ListNode(4);
        ListNode node5 = new ListNode(5);
        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = node5;

        ListNode res = reverse(node1);//line 31

//     ListNode node = node1;
//     while (node != null)
//     {
//         System.out.println(node.val);
//         node = node.next;
//     }

    }

    public static ListNode reverse(ListNode start)
    {   
        int counter = 0;
        ListNode node = start;
        ListNode pre = start;

        while (node!= null)
        {
            counter += 1;
            node = node.next;           
        }

        for (int i=0; i<counter/2; i++)
        {   
            pre = start;
            start = start.next; 
        }

        ListNode cur = start;

        if (counter%2 ==0)
        {
            while (cur != null)
            {
                ListNode temp = cur.next;
                cur.next = pre;
                pre = cur;
                cur = temp;
            }
        }
        else 
        {
            pre = pre.next;
            cur = start.next;

            System.out.println(pre.val);
            System.out.println(cur.val);

            while (cur != null)
            {
                ListNode temp = cur.next;
                cur.next = pre;
                pre = cur;
                cur = temp;


                System.out.println("-----");
                System.out.println(pre.val); //line 90
                System.out.println(cur.val);
                System.out.println("-----");
                System.out.println();
            }
        }

        return start;

    }
}

Erstens, ich bekam eine Fehlermeldung.

Exception in thread "main" java.lang.NullPointerException bei
ReverseRightHalfLinkedList.reverse(OA2.java:90) at
ReverseRightHalfLinkedList.main(OA2.java:31)

Zweitens, ich versuchte Druck die Reihenfolge Umgekehrt verkettete Liste, es ist noch in Ordnung. Es war nicht Umgekehrt.

Bitte helfen Sie mir, um herauszufinden, diese beiden Probleme. Vielen Dank!

InformationsquelleAutor OregonDuck | 2016-09-30
Schreibe einen Kommentar