2

コード:

/*
 * File: problem5.c
 * Author: levihackwith
 * Description: Write a Pop() function that is the inverse of Push(). Pop() takes a non-empty list, deletes the head node, and returns the head node's data.
 */

#include <stdio.h>
#include <stdlib.h>

struct node { // Our custom node data type
    int data;
    struct node *next;
};

/*
 * Adds a node to a linked list.
 *
 * This method was taken from the Appendix of the LinkedListProblems.pdf file from Stanford University.
 */
void Push(struct node** headRef, int newData) {
    struct node* newNode = malloc(sizeof (struct node)); // allocate node
    newNode->data = newData;
    newNode->next = (*headRef);
    (*headRef) = newNode;
};

void InsertNth(struct node** headRef, int insertAt, int newData) {
    struct node* newNode = malloc(sizeof (struct node)); // allocate node
    struct node* current = *headRef;
    int index = 0;

    newNode->data = newData;

    while (current != NULL) {
        if (insertAt == 0 && index == 0) {
            newNode->next = (*headRef);
            (*headRef) = newNode;
            current = *headRef;
            printf("Current's data is now %d at index %d \n\n", current->data, index);
        } else {
            if (index == (insertAt - 1)) {
                printf("I inserted %d at index %d \n", newData, insertAt);
                newNode->next = current->next;
                current->next = newNode;
            }
        }
        current = current->next;
        index++;
    }
}

/*
 * Builds a linked list of a given size.
 */
struct node* BuildList(int numNodes) {
    struct node* head = NULL; // Start with the empty list
    int i;

    for (i = numNodes; i >= 1; i--) {
        Push(&head, i); // Use Push() to add all the data
    }
    return (head);
};

int main(void) {

    struct node* myLinkedList;
    struct node* current;
    int currentIndex = 0;
    int valToInsert = 45;
    int insertIndex = 0;

    myLinkedList = BuildList(5);
    current = myLinkedList;

    InsertNth(&myLinkedList, insertIndex, valToInsert);
    while (current != NULL) {
        printf("The value at index %d is %d \n", currentIndex, current->data);
        currentIndex++;
        current = current->next;
    }

    return 0;
};

出力

Current's data is now 45 at index 0

The value at index 0 is 1
The value at index 1 is 2
The value at index 2 is 3
The value at index 3 is 4
The value at index 4 is 5

上記の出力は、新しい値を挿入するインデックスがゼロの場合のものです。インデックス 1 に挿入したときの出力を次に示します。

I inserted 45 at index 1

The value at index 0 is 1
The value at index 1 is 45
The value at index 2 is 2
The value at index 3 is 3
The value at index 4 is 4
The value at index 5 is 5

ご覧のとおり、0 は期待どおりに機能しませんが、1 は機能します。私は何を間違っていますか?

4

2 に答える 2