Singly linked list 插入和插入之间的差异;删除带有sentinel节点的单链接列表

Singly linked list 插入和插入之间的差异;删除带有sentinel节点的单链接列表,singly-linked-list,pseudocode,Singly Linked List,Pseudocode,我们的任务是为带有哨兵节点的单链表编码插入(L,k)和删除(L,k)函数。我的问题是: 这是正确的还是接近正确的答案 假设我所做的是正确的,我不是 查看与单个 没有哨兵节点的链表。我说的对吗 插入说明(L,k): 函数在列表中插入一个key==k的新节点(如果它还不存在的话) 删除(L,k)的说明: 函数查找key==k的节点,如果找到,则删除该节点 我们可以假设每个节点的密钥是唯一的 我对Insert的执行情况: fun Insert(pointer L,Key k) { poin

我们的任务是为带有哨兵节点的单链表编码插入(L,k)和删除(L,k)函数。我的问题是:

  • 这是正确的还是接近正确的答案

  • 假设我所做的是正确的,我不是 查看与单个 没有哨兵节点的链表。我说的对吗

  • 插入说明(L,k):

    函数在列表中插入一个key==k的新节点(如果它还不存在的话)

    删除(L,k)的说明:

    函数查找key==k的节点,如果找到,则删除该节点

    我们可以假设每个节点的密钥是唯一的

    我对Insert的执行情况:

    fun Insert(pointer L,Key k) {
        pointer p;
        pointer currNode = L; // first element
    
        while(currNode != NULL && currNode->data != k) {
            currNode = currNode->next;
        }
    
        if(currNode == NULL) { // element doesn't exist
            p = newcell(Node); // allocate memory for a new node
            p->data = k;
            p->next  = L;
            L = p;
            return;
        }
        else { // element exists
            throw error;
        }
    }
    
    我执行删除:

        fun Delete(pointer L, Key k) {
            pointer currNode = L; //first element
            pointer prev = NULL; // A pointer to the previous node
    
        if(currNode != NULL && currNode->data == k) { // first elemenent has k
            L = currNode->next;
            free(currNode);
        }
    
        // look for the elemenent to delete
        while(currNode->next != NULL && currNode->data != k) {
            prev = currNode;
            currNode = currNode->next;
        }
    
        if(currNode->next == NULL) throw error; // element not found
    
        // elemenent found
        prev->next = currNode->next;
        free(currNode);
    }
    
    另外,在我们的示例中,带有哨兵节点的单链接列表是这样的

    您好,Stelios,我可以看到您的代码正在运行。所以,请随时提出这个问题。检查一个例子。大多数时候,这里的代码审查都是火上浇油!另外,我想回顾一下这段代码。