簡體   English   中英

使用strcmp()插入函數

[英]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和最后一個節點的成員linkNULL

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM