双链表向Head添加元素
Double linked list adding elements to Head
我正在尝试创建一个双链表,有两个函数:第一个向尾部添加元素,第二个应该在开头添加元素,但它不起作用。
void AddNodeEnd (char addData)
{
nodePtr NewNode = new node;
NewNode->next = NULL;
NewNode->data = addData;
if (head != NULL)
{
curr = head;
while(curr->next != NULL)
{
curr = curr->next;
}
curr->next = NewNode;
}
else
{
head = NewNode;
}
}
void AddNodeHead (char addData)
{
nodePtr NewNode = new node;
NewNode->prev = NULL;
NewNode->data = addData;
head->prev = NewNode;
NewNode->next = head;
NewNode->prev = NULL;
}
添加节点时,您不会将 head
更新为新节点。
至于其他功能:
void AddNodeHead (char addData)
{
...
NewNode->next = head;
NewNode->prev = NULL; // you have this twice, not needed
}
如果 head
是 NULL
怎么办?您将尝试访问其 prev
成员,从而导致运行时错误。
我假设 head
是指向列表第一个元素的指针。
如果在列表的头部添加一个新节点,则新节点成为头部。
因此,如果您将元素添加到列表的头部,则必须在末尾分配:head = newNode
.
void AddNodeHead (char addData)
{
nodePtr NewNode = new node;
NewNode->prev = NULL;
NewNode->data = addData;
if ( head != NULL ) // consider an empty list
head->prev = NewNode;
NewNode->next = head; // this also works for an empty list
head = newNode; // <- this is missing in your code
}
我正在尝试创建一个双链表,有两个函数:第一个向尾部添加元素,第二个应该在开头添加元素,但它不起作用。
void AddNodeEnd (char addData)
{
nodePtr NewNode = new node;
NewNode->next = NULL;
NewNode->data = addData;
if (head != NULL)
{
curr = head;
while(curr->next != NULL)
{
curr = curr->next;
}
curr->next = NewNode;
}
else
{
head = NewNode;
}
}
void AddNodeHead (char addData)
{
nodePtr NewNode = new node;
NewNode->prev = NULL;
NewNode->data = addData;
head->prev = NewNode;
NewNode->next = head;
NewNode->prev = NULL;
}
添加节点时,您不会将 head
更新为新节点。
至于其他功能:
void AddNodeHead (char addData)
{
...
NewNode->next = head;
NewNode->prev = NULL; // you have this twice, not needed
}
如果 head
是 NULL
怎么办?您将尝试访问其 prev
成员,从而导致运行时错误。
我假设 head
是指向列表第一个元素的指针。
如果在列表的头部添加一个新节点,则新节点成为头部。
因此,如果您将元素添加到列表的头部,则必须在末尾分配:head = newNode
.
void AddNodeHead (char addData)
{
nodePtr NewNode = new node;
NewNode->prev = NULL;
NewNode->data = addData;
if ( head != NULL ) // consider an empty list
head->prev = NewNode;
NewNode->next = head; // this also works for an empty list
head = newNode; // <- this is missing in your code
}