2016-05-31 12 views
1

Ich versuche ein Problem von LeetCode zu lösen.Odd Even Laufzeitfehler für eine bestimmte Eingabe. Läuft gut für alles andere

Problem

durch den geraden Knoten eine einfach verkettete Liste, Gruppe alle ungeraden Knoten zusammen gefolgt gegeben. Bitte beachten Sie, dass hier die Knotennummer und nicht der Wert in den Knoten gemeint ist.

Sie sollten versuchen, es an Ort und Stelle zu tun. Das Programm sollte in O (1) Raumkomplexität und O (Knoten) Zeitkomplexität laufen.

Beispiel: Gegeben 1-> 2-> 3-> 4-> 5-> NULL, return 1-> 3-> 5-> 2> 4> NULL.

Meine Lösung:

/** 
* Definition for singly-linked list. 
* struct ListNode { 
*  int val; 
*  ListNode *next; 
*  ListNode(int x) : val(x), next(NULL) {} 
* }; 
*/ 
class Solution { 
public: 
    ListNode* oddEvenList(ListNode* head) { 

     ListNode *even, *firsteven, *odd, *curr; 

     if(head == NULL) 
      return NULL; 

     odd = head; 
     even = head; 
     curr = head; 

     if(head->next) { 
      even = even->next; 
      firsteven = head->next; 
     } 
     else return head; 

     if(head->next->next) 
      curr = head->next->next; 
     else return head; 

     while(curr) { 
      even->next = curr->next; 
      curr->next = NULL; 
      odd->next = curr; 
      curr->next = firsteven; 
      odd = odd->next; 
      even = even->next; 
      even->next ? curr = even->next : curr = NULL; 
     } 

     return head; 
    } 
}; 

Meine Lösung funktioniert sehr gut für alle Eingänge mit Ausnahme der Eingänge der Größe 3. Für einen Eingang 1-> 2-> 3 Ich bin eine Laufzeit Fehler. Ich habe mehrmals einen Trockenlauf gemacht. Ich bin mir nicht sicher, warum ich einen Laufzeitfehler bekomme.

Können Sie mir bitte sagen, was mache ich falsch?

Antwort

0

Das Problem ist, mit dieser Zeile:

even->next = curr->next; 

Wenn der Strom auf das letzte Element gesetzt ist (3), Sie versuchen curr-> nächste, was zu einem Fehler führt.

+0

Aber warum sollte das einen Fehler verursachen? curr-> next wird auf NULL gesetzt. Also sollte nicht einmal-> als nächstes gleich NULL zugewiesen werden? Wie verursacht das einen Laufzeitfehler? – Piyush