如何解决如何将新创建的节点添加到链接列表?
| 这是我的代码,我只能将节点添加到链接列表的开头,但是如何追加到链接列表的结尾?谢谢struct recordNode {
char name[256];
char event[128]; /
float time;
struct recordNode* next;
};
struct recordNode* temp;
struct recordNode* aRecordPointer = NULL;
struct recordNode* createRecord(char* name,char* event,float time) {
temp = (struct recordNode*)malloc(sizeof(struct recordNode));
strcpy(temp->name,name);
strcpy(temp->event,event);
temp->time = time;
/* link up */
if (aRecordPointer == NULL) {
aRecordPointer = temp;
temp->next = NULL;
} else {
temp->next = aRecordPointer;
aRecordPointer = temp;
}
return aRecordPointer;
}
int main() {
struct recordNode* record = createRecord(\"1abc\",\"abc\",12.25);
record = createRecord(\"2abc\",25.98);
record = createRecord(\"3abc\",52.60);
}
/* now result:
3abc abc 12.25
2abc abc 25.98
1abc abc 52.60
needed result:
1abc abc 52.6
2abc abc 25.98
3abc abc 12.25
*/
解决方法
假设aRecordPointer是您指向列表的头(第一个)元素的指针,则需要从头到尾(最后一个)迭代列表。
struct recordNode* createRecord(char* name,char* event,float time){
temp = (struct recordNode*)malloc(sizeof(struct recordNode));
strcpy(temp->name,name);
strcpy(temp->event,event);
temp->time = time;
temp->next = NULL;
if (aRecordPointer == NULL) {
aRecordPointer = temp;
}
else {
struct recordNode* pLast = aRecordPointer;
/* find the last element */
while(pLast->next != NULL) {
pLast = pLast->next;
}
/* get linked */
pLast->next = temp;
}
return aRecordPointer;
}
, 假设aRecordPointer是指向最后一个Node的指针,则如下修改代码:
struct recordNode* createRecord(char* name,float time)
{
temp = (struct recordNode*)malloc(sizeof(struct recordNode));
strcpy(temp->name,event);
temp->time = time;
//I have added this line as well.
temp->next = NULL;
/* link up */
if (aRecordPointer == NULL)
{
aRecordPointer = temp;
}
else
{
aRecordPointer->next = temp;
aRecordPointer = temp;
}
return aRecordPointer;
}
还要注意,您应该始终有一个指向Head(第一个节点)的指针,以便以后遍历链接列表。
, #include<stdio.h>
#include<string.h>
#include<stdlib.h>
void Traverse();
struct recordNode {
char name[256];
char event[128];
float time;
struct recordNode* next;
};
struct recordNode* temp;
struct recordNode* aRecordPointer = NULL;
struct recordNode* createRecord(char* name,float time) {
struct recordNode * ToTraverseTheLinkedList;
temp = (struct recordNode*)malloc(sizeof(struct recordNode));
strcpy(temp->name,event);
temp->time = time;
temp->next = NULL;
/* link up */
if (aRecordPointer == NULL) {
aRecordPointer = temp;
//temp->next = NULL;
}
else
{
ToTraverseTheLinkedList = aRecordPointer;
while(ToTraverseTheLinkedList->next != NULL)
{
ToTraverseTheLinkedList = ToTraverseTheLinkedList ->next;
}
ToTraverseTheLinkedList->next = temp;
}
return aRecordPointer;
}
int main() {
createRecord(\"1abc\",\"abc\",12.25);
//Traverse();
createRecord(\"2abc\",25.98);
createRecord(\"3abc\",52.60);
Traverse();
}
void Traverse()
{
struct recordNode * temp;
temp = aRecordPointer;
while(temp != NULL)
{
printf(\"%s\\n\",temp->name);
printf(\"%s\\n\",temp->event);
printf(\"%f\\n\",temp->time);
temp = temp->next;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。