我正在尝试编写一个函数,该函数获取链表的开头,链表的末尾,添加节点(n)的位置,数字和价格。
链表中的每个节点都包含一个数字,该数字也是该节点在列表中的位置。 这里有些东西行不通,由于某种原因,它一直将新节点放置在链表的第一个位置。谢谢您的帮助。 这是一张如何打印的照片:
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;
答案 0 :(得分:0)
以下建议的代码:
现在,建议的代码:
#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代表我要添加的节点的位置。