删除链接列表节点后附加问题

时间:2016-04-13 16:09:13

标签: c

我可以在我的链表节点中追加,显示,修改,删除和搜索。删除效果很好,但是当我想在其后添加时,它似乎会覆盖(或删除节点)。

让我说我有:

A - B - C节点

我删除了B节点。之后看起来像:A - C. 我想附加一个D节点,如下所示:A - C - D.

但是,它看起来像这样:A - D

这可能是什么问题?

整个项目非常大,但删除看起来像这样:

    for ( ; llist->next != NULL; llist = llist->next)
   {
      if(strcmp(text, llist->book)==0)
      {
         break;
      }
      prev = llist;
   }

    if ( llist != NULL )
     {
      if ( llist == head)
      {
         head = llist->next;
      }
      else
      {
         prev->next= llist->next;
      }

      free(llist);
      printf("The %s string has been deleted!\n", text);
    }   

附加代码如下所示:

 while(getline(text,MAX)) 

    {

    if(!(llist = (struct lib*)malloc(sizeof(struct lib)))) { /*mem allocation*/
            break;
        }

        if(head) {
            prev->next= llist;
        } else {
            head= llist;
        }
        prev = llist;

    llist -> next= NULL;


    while(!textcheck(text))
    {
    printf("Please retype the name in the correct format: ");
    getline(text, MAX);
    }

    strcpy(llist->author, text); //hozzáírunk a láncolt listához

    printf("Please type the title of the book: ");
    getline(text, MAX);
    strcpy(llist->book,text);


    printf("Please type the release date: ");


    getline(szoveg, MAX);

    while(!yearcheck(text)) {
    printf("Please type a year between 1500 and 2016: ");
    getline(text, MAX);

    }
    num = atoi(text);

    llist->year = num;


    printf("Please type a topic: \n");
    printf("Topics: SciFi, Haboru, Fantasy,\nEletrajz, Ismeretterjeszto, Thriller, Akcio\n");


    strcpy(llist->tema, text);
    }

1 个答案:

答案 0 :(得分:1)

让我们以 <?php session_start(); if (!isset($_SESSION['email'])) header('location: index.php'); require_once("connection.php"); $eventid = $_GET['ID']; $field = $_GET['Name']; $result = mysql_query("SELECT $field FROM `persons` WHERE `ID` = '$eventid' "); if(mysql_num_rows($result)>0) { $row = mysql_fetch_array($result); $output = $row[$field]; // to populate } else { $output =''; } ?> <!DOCTYPE html> <html lang="en"> <head> <title>Welcome</title> </head> <body> <form action="app_script.php" method="POST"> <input class="form-control" placeholder="Name" name="name" required = "true" value="<?php echo $output; ?>"> <button type="submit" name="submit" class="btn btn-primary pull-right">Submit</button> </form> </body> </html> 为例。从第一个循环开始,删除节点A-B-C后,prev将为A

B

之后,当谈到附加时,它正在更新:

for ( ; llist->next != NULL; llist = llist->next) 

{

if(strcmp(text, llist->book)==0){
    break;
}
prev = llist;

}

这意味着if(head){ prev->next= llist; } 的下一个将指向A而不是D。因此,C的引用将丢失,最终列表将显示为C