[英]Insert Function using strcmp()
我正在嘗試制作插入函數,但不知道是否允許在參數中使用char字符串和節點。
這樣行嗎? 為什么不?
void insert(char* str, node* head) {
if (head == NULL) {
node* new_node = malloc(sizeof(struct node));
assert(new_node != NULL);
new_node->value = strdup(str);
}
while (head != NULL) {
if (strcmp(str, head->value)) {
node *new_node = malloc(sizeof(struc node));
assert(new_node != NULL);
new_node->link = head;
new_node->value - strdup(str);
}
}
node *prev = head;
head = head->link;
您不必按返回值返回列表的新標題。 如果插入一個節點,則必須為一個節點分配內存。 不要忘記第一個節點的初始化成員prev
和最后一個節點的成員link
為NULL
:
node* insert(char* str, node* head)
{
node* new_node = malloc(sizeof(struct node));
assert(new_node != NULL);
new_node->value = strdup(str);
new_node->link = NULL; // successor of new node is NULL
if ( head == NULL )
{
new_node->pev = NULL; // prdecessor of first node is NULL
head = new_node;
return new_node; // head was NULL, return new head
}
node *lastNode = head; // go to last node of list
while ( head->link != NULL )
lastNode = lastNode->link; // step one forward
lastNode->link = new_node; // successor of last node is new node
new_node->prev = lastNode; // predecesor of new node is last node
return head;
}
--
node *head = NULL;
head = insert( "abc", head );
head = insert( "def", head );
另一種解決方案是在函數insert
為參數head
使用in和output參數:
void insert(char* str, node** head)
// ^^ in and output parameter
{
node* new_node = malloc(sizeof(struct node));
assert(new_node != NULL);
new_node->value = strdup(str);
new_node->link = NULL; // successor of new node is NULL
node* prev = NULL;
node* act = *head;
while ( act != NULL ) // go to last node in list
{
prev = act;
act = act->link; // step one forward
}
new_node->prev = prev; // predecessor of new node is last node or NULL
if ( prev == NULL )
*head = new_node; // new node is the first node in list,
// write the new node back to head
else
prev->link = new_node; // successor of last node is new node
}
--
node *head = NULL;
insert( "abc", &head );
insert( "def", &head );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.