我有一个链表,我想减少指向链表指针的指针,但是有一些问题 .
对于以下C程序:
#include
#include
struct node
{
int data;
struct node *next;
};
int main()
{
/*Create an empty list*/
struct node *head = NULL;
/*Set the first node of list*/
head = malloc(sizeof(struct node));
head->data = 1;
head->next = NULL;
struct node *head1 = head;
/*Set the second node of list*/
head1->next = malloc(sizeof(struct node));
head1 = head1->next;
head1->data = 2;
head1->next = NULL;
/*Print 1st and 2nd node data*/
printf("%d ",head->data);
head = head->next;
printf("%d ",head->data);
/*Decrement head. As head was pointing to 2nd node, after head-- it should point to first node ??*/
head--;
printf("%d \n",head->data);
return 0;
}
我期待低于输出:
1 2 1
但是我得到低于输出:
User $ ./a.out
1 2 0
User $
所以看起来我最后做的 head-- 并没有真正减少 head 为1(如果它确实 head 指向执行最后一次printf之前的第一个节点) .
所以不能递增或递减链表指针?就像我们为普通指针做的那样?例如:对于a []我们做a或a--指出下一个或宝贵的索引 .
注意:我只是意识到链接列表节点不在一个连续的存储位置,所以做头 - 指向以前的节点不会感觉到 .
谢谢所有回答或评论的人 .