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!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die Rückseite der rechten Hälfte der Liste , so müssen Sie speichern letzten Knoten der linken Hälfte und der Kopf der Liste , so als wenn die Rechte Hälfte wieder rückgängig gemacht , können Sie verknüpfen Sie mit der linken Hälfte und wieder die ganze Liste .
Ich haben, ändern Sie den reverse-Methode :
Basierend auf @passion ' s Idee. Ich habe ein übersichtlicher code.
Hoffe, dieser code hilft Ihnen, zu verstehen.
Warum nicht etwas sehr einfach. Wir kennen die Größe der Liste. Wir können
list.get(counter)
Durchlaufen vom Ende zur Mitte. Es war ein bisschen Herausforderung bei der Erstellung der Liste war die Größe gerade oder ungerade ist, aber seine machbar.Hier ist ein Weg, um reverse zweiten Hälfte(rechts) der verlinkten Liste.