我创建了一个包含10个节点的链表。我想得到我在链表中创建的第一个节点的地址。第一个节点的地址值不正确。这是我写的代码:

#include "singlyLinkedList.h"
#include <stddef.h> //for NULL
#include <stdlib.h> //for malloc
#include <stdio.h> //for printf

node *pNode;

void CreateLinkedList()
{
    int i;
    pNode = (node*)malloc(sizeof(node)); //create space for first node []
    for(i=0;i<10;i++)
    {
        pNode->element = i; //enter value [0]
        printf("Value is %d addr is %p\n",pNode->element,pNode);
        pNode->nextPtr = (node*)malloc(sizeof(node)); //[0]->[]->NULL
        pNode = pNode->nextPtr;
    }
    pNode->nextPtr=NULL;
}

//Function to get first node address
void GetFirstNodeAddress()
{
    pNode = pNode-10*(sizeof(node));
    printf("\n *** Value is %p",pNode);
}


int main()
{
    CreateLinkedList();
    GetFirstNodeAddress();
}

最佳答案

假设您所做的10个malloc将导致10个连续地址。你把它当作一个数组来处理,但是链表的元素是独立的。
这些链表通常的工作方式是初始化它们并保留稍后返回的第一个指针。然后在尾巴上长出更多的元素。不能在单个链接列表中后退。
我今天在earlier post中给出了一个代码示例

10-05 21:15