Beispiel Ergebnis:alternative merge verketteten Liste (C-Code)
2 angegebene verketteten Liste:
LL1: 1 3 5 7 9
LL2: 2 4 6
Nach dem Ausführen des Programms sollte das Ergebnis ...
Ergebnis:
LL1: 1 2 3 4 5 6 7 9
LL2: empty
Etwas ist mit dem folgenden Code falsch.
void alternateMergeLinkedList(LinkedList *ll1, LinkedList *ll2)
{
/* add your code here */
int index = 1;
int j;
ListNode *ptr_node1;
ListNode *ptr_node2;
ptr_node1 = ll1->head;
ptr_node2 = ll2->head;
while (ptr_node2 != NULL) {
j = insertNode(ll1, index, ptr_node2->item);
j = removeNode(ll2, 0);
index += 2;
}
}
Da InsertNode und removeNode Funktionen:
int insertNode(LinkedList *ll, int index, int value)
{
ListNode *pre, *cur;
if (ll == NULL || index < 0 || index > ll->size + 1)
return -1;
// If empty list or inserting first node, need to update head pointer
if (ll->head == NULL || index == 0) {
cur = ll->head;
ll->head = malloc(sizeof(ListNode));
ll->head->item = value;
ll->head->next = cur;
ll->size++;
return 0;
}
// Find the nodes before and at the target position
// Create a new node and reconnect the links
if ((pre = findNode(ll, index - 1)) != NULL) {
cur = pre->next;
pre->next = malloc(sizeof(ListNode));
pre->next->item = value;
pre->next->next = cur;
ll->size++;
return 0;
}
return -1;
}
int removeNode(LinkedList *ll, int index)
{
ListNode *pre, *cur;
// Highest index we can remove is size-1
if (ll == NULL || index < 0 || index >= ll->size)
return -1;
// If removing first node, need to update head pointer
if (index == 0) {
cur = ll->head->next;
free(ll->head);
ll->head = cur;
ll->size--;
return 0;
}
// Find the nodes before and after the target position
// Free the target node and reconnect the links
if ((pre = findNode(ll, index - 1)) != NULL) {
if (pre->next == NULL)
return -1;
cur = pre->next;
pre->next = cur->next;
free(cur);
ll->size--;
return 0;
}
return -1;
}
Versuchen Sie, den Code zeilenweise in einem Debugger zu durchlaufen, um zu sehen, was er tatsächlich tut. –
Auch in Ihrer Funktion 'alternateMergeLinkedList' ist dieser 'index + = 2' möglicherweise nicht so gut, wenn' ll2' länger ist als 'll1'. –
Schließlich haben Sie uns das erwartete Ergebnis gezeigt, aber was sind die * tatsächlichen * Ergebnisse? Wie bekommst du das Ergebnis? Bitte [lesen Sie, wie Sie gute Fragen stellen können] (http://stackoverflow.com/help/how-to-ask) und erfahren Sie, wie Sie ein [minimales, ** vollständiges ** und verifizierbares Beispiel] erstellen können (http: //stackoverflow.com/help/mcve). –