c - LinkedList 添加节点按大小与 C 比较

标签 c data-structures linked-list

今天,我从老师那里收到了新作业。

他告诉我这个作业可能是期末考试的样本。

我尝试了大约2~3小时,但无法获取。

他给了我一个简单的LinkedList代码。下面粗体字是他想要的。

您能给我一些关于比较节点大小的提示吗?

添加节点与前置节点和后节点对比

2 --> 5 --> 10 --> 20

当我插入MiddleNode(7)时,自动将输入数字(7)与ListNode进行比较并找到正确的位置

我的目标:2 --> 5 --> 7(这是我的输入)--> 10 --> 20

老师的代码如下:

    void insertMiddleNode(linkedList_h* L, listNode* pre, int x) {
        listNode* newNode;
        newNode = (listNode*)malloc(sizeof(listNode));
        newNode->data = x;
        if (L == NULL) {                // Empty
            newNode->link = NULL;       // connect
            L->head = newNode;
        }
        else if (pre == NULL) {         // 
            L->head = newNode;          // Insert Node at First
        }
        else {
            newNode->link = pre->link;  // after pre node
            pre->link = newNode;
        }
    }

或者是否可以在主代码中实现相同的功能?

    int main() {

        linkedList_h* L;
        listNode* p;
        L = createLinkedList_h();

        insertLastNode(L, 1);
        insertLastNode(L, 5);
        insertLastNode(L. 10);
        insertLastNode(L, 20);    // 1 - 5 - 10 - 20

        insertMiddleNode(L, p, 7)  // using p = scanf("%d") with If ( p < pre Node )

        printList(L)  // 2 - 5 - 7 - 10 - 20
    }

最佳答案

void MiddleNode(linkedList_h* L, int x) {
    if (L == null)
         return

    //setp 1: find the previous node
    listNode* prev = null;
    for (listNode* node = L->head; node && node->data < x; node = node->link)
        prev = node;

    //step2: be sure prev is not null
    if (prev == null)
        return;
        //or call inserFirstNode(L, x) and return

    //step 3: call your teacher's function
    insertMiddleNode(L, prev, x);
    return;
}

如果L不存在则返回,否则会崩溃

第一步很简单,循环遍历列表找到前一个元素 但是你最终可能会得到 null 作为上一个节点(要么因为列表为空,要么 x 是最小的),在这两种情况下你都需要返回(或者你会破坏列表)。 然后只需调用老师的函数即可

关于c - LinkedList 添加节点按大小与 C 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59267098/

相关文章:

c - 从 C 中的链表中弹出一个元素

objective-c - 将 char 数组保存到 iPhone

c - 循环内的函数,或函数内的循环

hibernate - 努力优化Hibernate中的N+1查询

c - 段错误 :11 in my code for creating a linked list in C

c - 通过尾指针添加到链表,无需 3 级间接

c - 算法挑战 : Generate Continued Fractions for a float

C - 如何打开窗口资源管理器

algorithm - 数组的范围更新和查询

java - Java 中的节点使用哪种数据结构?