c - C中的反向链表程序

标签 c linked-list

我在 C 中有以下简单的链表程序,除了反向“数据”功能外,它工作正常。我错过了什么?? (第二个反向函数也有类似的问题) enter image description here

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

typedef struct LinkedListNodeType {
    int data;
    struct LinkedListNodeType *pLink;
} LinkedListNode;

typedef struct LinkedListType {
    int             currentCount;
    LinkedListNode  headerNode;
} LinkedList;

LinkedList *createLinkedList() {
    LinkedList *pReturn = (LinkedList *)malloc(sizeof(LinkedList));
    memset(pReturn, 0, sizeof(LinkedList));
    return pReturn;
}

int addLinkedListData(LinkedList *pList, int position, int data) {
    int i = 0;
    LinkedListNode *pNewNode = NULL;
    LinkedListNode *pPreNode = NULL;

    pNewNode = (LinkedListNode *)malloc(sizeof(LinkedListNode));
    pNewNode->data = data;

    pPreNode = &(pList->headerNode);
    for (i = 0; i < position; i++) {
        pPreNode = pPreNode->pLink;
    }

    pNewNode->pLink = pPreNode->pLink;
    pPreNode->pLink = pNewNode;
    pList->currentCount++;
    return 0;
}

void deleteLinkedList(LinkedList *pList) {
    LinkedListNode *pDelNode = NULL;
    LinkedListNode *pPreNode = pList->headerNode.pLink;
    while (pPreNode != NULL) {
        pDelNode = pPreNode;
        pPreNode = pPreNode->pLink;

        free(pDelNode);
    }

    free(pList);
}

void iterateLinkedList(LinkedList *pList)
{
    int count = 0;
    LinkedListNode *pNode = NULL;

    pNode = pList->headerNode.pLink;
    while (pNode != NULL) {
        printf("[%d],%d\n", count, pNode->data);
        count++;

        pNode = pNode->pLink;
    }
    printf("node count: %d\n", count);
}

void reverseLinkedList(LinkedList *pList) {
    LinkedListNode *preNode = NULL;
    LinkedListNode *PpreNode = NULL;
    LinkedListNode *headNode = pList->headerNode.pLink;

    while (headNode->pLink != NULL) {
        if (preNode = NULL) {
            preNode = headNode;
            headNode = headNode->pLink;
            preNode->pLink = NULL;
        } else {
            PpreNode = headNode;
            headNode = headNode->pLink;
            PpreNode->pLink = preNode;
            preNode = PpreNode;
        }
    }
    headNode->pLink = PpreNode;
}

//void reverseLinkedList(LinkedList *pList) {       
//  LinkedListNode *preNode = NULL;
//  LinkedListNode *PpreNode = NULL;
//  LinkedListNode **headNode = &(pList->headerNode.pLink); 
//
//  while ((*headNode)->pLink != NULL) {
//      if (preNode = NULL) {
//          preNode = (*headNode);
//          (*headNode) = (*headNode)->pLink;
//          preNode->pLink = NULL;
//      } else {
//          PpreNode = (*headNode);
//          (*headNode) = (*headNode)->pLink;
//          PpreNode->pLink = preNode;
//          preNode = PpreNode;
//      }
//  }
//  (*headNode)->pLink = PpreNode;
//}

int main(int argc, char* argv[])
{
    LinkedList *pList = NULL;
    pList = createLinkedList();
    addLinkedListData(pList, 0, 70);
    addLinkedListData(pList, 0, 60);
    addLinkedListData(pList, 0, 50);
    addLinkedListData(pList, 0, 40);
    addLinkedListData(pList, 0, 30);
    addLinkedListData(pList, 0, 20);
    addLinkedListData(pList, 0, 10);

    printf("revers before\n");
    iterateLinkedList(pList);

    printf("\n\nrevers\n");
    reverseLinkedList(pList);
    iterateLinkedList(pList);

    deleteLinkedList(pList);
    return 0;
}

最佳答案

void reverseLinkedList(LinkedList* pList) {
    LinkedListNode* preNode = NULL;
    LinkedListNode* PpreNode = NULL;
    LinkedListNode* headNode = pList->headerNode.pLink;
    while (headNode != NULL) {
        PpreNode = headNode->pLink;
        headNode->pLink = preNode;
        preNode = headNode;
        headNode = PpreNode;
    }
    pList->headerNode.pLink = preNode;
}

关于c - C中的反向链表程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38909461/

相关文章:

c - 使用非字符数据作为参数的 memcpy 中的问题!

c++ - directx 9 与 Visual Studio 2012 Express

c++ - 无法将元素添加到链表的末尾

在 C 中将单个整数与整数数组进行比较?

c - 为什么这个程序在运行时停止工作?

C - 哈希表键的链表

C - 如何遍历链表中的子节点?

c++ - C++中链表的错误 “Abort signal from abort(3) (sigabrt) ”

c++ - 节点和链表的问题

c - 了解参数为 const 时的函数声明?