【发布时间】:2013-02-23 20:38:15
【问题描述】:
我是 C 新手。我正在尝试使用链表交换两个节点。不知道出了什么问题。它给了我一个错误说
“temp”未声明。
另外,我可以在这段代码中进行哪些更改,不仅可以交换 char,还可以交换 int?
struct lnode {
int some_line;
int count;
char* some_word;
struct lnode* next;
};
void swapNodes(struct lnode** head, struct lnode* n1, struct lnode* n2);
int main()
{
struct lnode* head = NULL;
struct lnode* node0 = newCharNode(&head,"this is");
struct lnode* node1 = newCharNode(&head,"programming");
swapNodes(&head,node0,node1);
getchar();
return 0;
}
void swapNodes(struct lnode** head, struct lnode* n1, struct lnode* n2)
{
struct lnode* current = (*head);
struct lnode* temp;
while((current != NULL) && (current->next != NULL))
{
temp->some_word = n1->some_word;
n1->some_word = n2->some_word;
n2->some_word = temp->some_word;
}
printf("%s %s",n1,n2);
current = (current->next)->next;
}
struct lnode* newCharNode(struct lnode** head, char* myword) {
struct lnode* new_node = (struct lnode*) malloc(sizeof(struct lnode));
new_node ->some_word = myword;
new_node ->next = (*head);
(*head) = new_node;
}
【问题讨论】:
-
修复缺少的包含和缺少
newCharNode的原型后,我无法重现您遇到的编译错误。 -
我包含了必要的文件,我得到了我理解的 temp 错误,但如何解决它,我不知道。感谢您的帮助。
-
swapNodes 似乎意味着简单地交换两个节点的内容,但该函数正在做一些更复杂的事情。此外,while 循环要么永远不会进入循环体,要么永远循环,因为指针'current' 在循环中永远不会被修改。如果只想交换两个节点的内容,只需将指针传递给两个节点,交换结构中除链接指针之外的所有内容,然后返回。