插入节点时单排序链表头指针的移位

Shifting of head pointer of singly soretd linked list while inserting a node

这是一个以 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;
}

很可能您在主程序中使用名称“head”本身作为列表的起点。在这个函数中,你实际上是在使用 "head" 并使 "head" 遍历直到遇到下一个小于输入值的元素。

所以头部现在是输入值之前的元素。

要解决此问题,只需在 Insert_in_sorted_list(node **head_ref,int data) 函数中将节点指针“*head”重命名为类似“*currentNode”的名称。