在学习链表的时候,使用头插法遇到了问题。
#include
#include
struct Node {
int date;
struct Node* next;
};
/*创建链表头 /
struct Node createList()
{
struct Node headNode = (struct Node)malloc(sizeof(struct Node));
headNode->date = 1;
headNode->next = NULL;
return headNode;
}
/创建节点/
struct Node* createNode(int data)
{
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->date = data;
newNode->next = NULL;
return newNode;
}
/打印链表/
void printList(struct Node* headNode)
{
struct Node* pmove;
pmove = headNode->next;
while (pmove)
{
printf("%d", pmove->date);
pmove = pmove->next;
}
printf("\n");
}
/插入节点,插入哪个链表,插入节点的数据是多少,头插法/
void inserNodebyHead(struct Node* headNode, int data)
{
/创建新的节点/
struct Node* newNode = createNode(data);
newNode->next = headNode->next;
//newNode = headNode->next; ** //使用这一句代码时,不能正常打印出链表的成员,而下面那句代码却可以**
headNode->next = newNode;
}
int main()
{
struct Node* list = createList();
inserNodebyHead(list, 1);
inserNodebyHead(list, 2);
inserNodebyHead(list, 3);
printList(list);
return 0;
}
/正确运行的输出结果是321,而使用那句问题代码时,却什么都没有打印,好想知道问题出在哪/
这是带头结点的链表,headNode->next 指向链表的第一个结点,而void inserNodebyHead(struct Node* headNode, int data)插入函数是头插法,newNode 是待插入的新结点,所以头插法就是:newNode->next = headNode->next; 这句将新结点尾指针 newNode->next 指向链表的第一个结点,即headNode->next; 指向的结点。
headNode->next = newNode; 这句实现将头结点的尾指针指向待插入新结点 newNode,让 newNode 成为链表的第一个结点。所谓头插法,是每次把新结点插入到链表的第一个结点位置,所以上面的代码没问题。
#include <stdio.h>
#include <stdlib.h>
struct Node {
int date;
struct Node* next;
};
//创建链表头
struct Node* createList()
{
struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
headNode->date = 1;
headNode->next = NULL;
return headNode;
}
//创建节点
struct Node* createNode(int data)
{
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->date = data;
newNode->next = NULL;
return newNode;
}
//打印链表
void printList(struct Node* headNode)
{
struct Node* pmove;
pmove = headNode->next;
while (pmove)
{
printf("%d", pmove->date);
pmove = pmove->next;
}
printf("\n");
}
//插入节点,插入哪个链表,插入节点的数据是多少,头插法
void inserNodebyHead(struct Node* headNode, int data)
{
//创建新的节点
struct Node* newNode = createNode(data);
newNode->next = headNode->next; //将新结点尾指针 newNode->next 指向链表的第一个结点,即headNode->next;
//newNode = headNode->next; //这句是使新结点的指针newNode 指向头结点的尾指针 headNode->next?
headNode->next = newNode;//将头结点的尾指针headNode->next指向待插入新结点 newNode,让 newNode 成为链表的第一个结点。
}
int main()
{
struct Node* list = createList();
inserNodebyHead(list, 1);
inserNodebyHead(list, 2);
inserNodebyHead(list, 3);
printList(list);
return 0;
}