向主题

时间:2017-06-18 14:14:38

标签: c++ linked-list doubly-linked-list

我正在尝试创建一个双链表,并且有两个函数:首先将元素添加到尾部,第二个应该在开始时添加元素,但它不起作用。

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;
    }

2 个答案:

答案 0 :(得分:1)

我假设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
}

答案 1 :(得分:0)

在添加节点时,您不必将void AddNodeHead (char addData) { ... NewNode->next = head; NewNode->prev = NULL; // you have this twice, not needed } 更新为新节点。

至于其他功能:

head

如果NULLprev怎么办?您将尝试访问其<input type="text" placeholder="Enter your Email" ng-model="email" required> <input type="text" placeholder="Enter your password " ng-model="password" required> 成员,从而导致运行时错误。