在插入节点时移动单个soretd链表的头指针

时间:2015-07-20 19:10:57

标签: linked-list parameter-passing

这是一个用c ++样式定义的函数,用于在预先排序的链表中插入值。函数参数是指向链表头部和插入值的指针。请忽略结束条件,列表按非递增顺序排序: 列表15->12->9->6->3 插入元素7 要求o / p:15->12->9->7->6->3 但是它给了9->7->6->3

请指出我的错误,因为我试过但没有得到它,因为我将双指针传递给第一个节点,但没有改变功能。

void llist::Insert_in_sorted_list(node **head_ref, int data) {
    node *head, *ptr;
    head = *head_ref;
    while (head->next->data > data) {
        head = head->next;
    }

    ptr = new node;
    ptr->data = data;
    ptr->next = head->next;
    head->next = ptr;
}

1 个答案:

答案 0 :(得分:0)

很可能您在主程序中使用名称“#include <cstdlib> struct Value { size_t value; operator uintptr_t() { return static_cast<uintptr_t>(value); } }; int main() { Value v; void* p=reinterpret_cast<void*>(static_cast<uintptr_t>(v)); // This is how the project uses it // or less verbose void* p2=reinterpret_cast<void*>(uintptr_t(v)); } ”作为列表的起点。在这个函数中,你实际上是使用“head”并使“head”遍历,直到遇到小于输入值的下一个元素。

因此,头部现在是输入值之前的元素。

要解决此问题,只需将节点指针“head”重命名为此*head函数中的“*currentNode”。