我正在用C编写一个基本的链表程序,删除时遇到一些麻烦。 这就是我所拥有的:
#include <stdio.h>
struct node * delete(struct node * head, struct node * toDelete);
void print(struct node * head);
struct node {
int value;
struct node *next;
};
int main(int argc, const char * argv[]) {
struct node node1, node2, node3;
struct node *head = &node1;
node1.value = 1;
node1.next = &node2;
node2.value = 2;
node2.next = &node3;
node3.value = 3;
node3.next = (struct node *) 0;
print(head);
delete(head, &node3);
print(head);
return 0;
}
struct node * delete(struct node * head, struct node * toDelete) {
//if to delete is head
if (head == toDelete) {
head = head->next;
} else {
//find node preceding node to delete
struct node *current = head;
while (current->next != toDelete) {
current = current->next;
}
current = current->next->next;
}
return head;
}
void print(struct node * head) {
struct node *current = head;
while (current != (struct node *) 0) {
printf("%i\n", current->value);
current = current->next;
}
}
问题1:所以我试着写:
delete(head, node3);
但xCode希望我在“node3”前添加“&”。 通常情况下,当我定义一个函数来获取指针时,我需要传入内存地址吗?
问题2:
我的打印功能用于打印出3个节点的值。 在调用delete并尝试删除node3之后,它仍然打印出3个节点。 我不确定我哪里出错了。 我找到了我要删除的节点之前的节点,并在节点之后设置其下一个指向节点的指针(非正式地:node.next = node.next.next)。
有任何想法吗?
谢谢你的帮助,bclayman