将节点添加到链接列表

时间:2018-12-25 20:08:48

标签: c

我正在尝试编写一个函数,该函数获取链表的开头,链表的末尾,添加节点(n)的位置,数字和价格。

链表中的每个节点都包含一个数字,该数字也是该节点在列表中的位置。 这里有些东西行不通,由于某种原因,它一直将新节点放置在链表的第一个位置。谢谢您的帮助。 这是一张如何打印的照片:

image

void AddNewItem(PItem *head, PItem *tail, int n, int a, float b){
    PItem temp = *head, curr = *head;
    temp->num = a;
    temp->price = b;
    temp = (PItem*)malloc(sizeof(PItem));

    while (n < temp->num) {
        temp = temp->next;
        curr = curr->next;
    }
    temp->next = curr->next;
    curr->next = temp;
}

这是结构:

typedef struct Item
{
    int num;
    float price;
    struct Item* next;
}*PItem;

2 个答案:

答案 0 :(得分:0)

以下建议的代码:

  1. 消除未使用的参数
  2. 干净地编译
  3. 执行所需的操作
  4. 正确检查错误

现在,建议的代码:

#include <stdlib.h>
#include <stdio.h>

// format struct definition for readability 
// and eliminate undesireable 'typedef' of a pointer
struct Item 
{ 
    int num; 
    float price; 
    struct Item* next; 
};


// use meaningful names for paramters and
// allow for this might be first entry into linked list
void AddNewItem(struct Item **head, int num, float price)
{
    struct Item *curr = *head;
    struct Item *prev = *head;

    struct Item *newNode = malloc(sizeof(struct Item));
    if( !newNode )
    {
        perror( "malloc failed" );
        exit( EXIT_FAILURE );
    }

    // implied else, malloc successful

    // initialize fields of new node
    newNode->num = num;
    newNode->price = price;  
    newNode->next = NULL;

    // check if first node added to linked list
    if( !*curr )
    { // then first addition to linked list
        *curr = newNode;
    }

    else
    {
        // check for end of linked list and
        // check for found desired position in linked list
        while ( curr->next )  
        {
            if( curr->num >= newNode->num )
            {
                break;
            }

            // implied else

            prev = curr;
            curr = curr->next;
        }

        // insert the new item into the linked list
        newNode->next = curr;
        prev->next = newNode;
    }
}

答案 1 :(得分:0)

@ user3629249是Elad Kobi。感谢您的帮助。 当我尝试调试您的代码时,出现一些错误。 另一件事,您没有使用参数tail和n。 参数n代表我要添加的节点的位置。