我可以在我的链表节点中追加,显示,修改,删除和搜索。删除效果很好,但是当我想在其后添加时,它似乎会覆盖(或删除节点)。
让我说我有:
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);
}
答案 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
。