关于链表的几个问题
声明:可以把向前挂车厢想象成把后一节车厢的地址赋值给前一车厢的next指针。首先,我们把链表的节点比喻成火车的车厢。每节车厢的前面都有一个钩子,我们把这想想成指针,他用来连接上一节车厢。
接着,使用尾插法的话,也就是先要找到火车尾,即链表的尾指针。然后把自己要加进去的车厢挂到火车的最后面。最后标记这节车厢为火车尾(把地址赋值给尾指针)。
使用头插法的话,就是先找到火车头,即链表的头指针。然后把头指针后面的那节车厢挂到你要插入链表的那节车厢的后面。最后在把插入链表的那节车厢挂到火车头去(把地址赋值给头指针)。
举例:
(火车车厢)
struct node
{
int num;
node* next;
};
(火车头)node* Head;
(火车尾)node* End;
(车厢1)node* m1;
(车厢2)node* m2;
//开始前链表只有火车头,后面没有车厢,车头也是车尾。
Head=End=NULL;
//1.头插法
//申请车厢1
m1=new node;
m1->next=NULL;
if(Head==NULL) //如果只有火车头执行这里面的 就想问问这里的head不是本来就等于null嘛,为什么要用if语句
{
Head=m1; //把第一节车厢先挂到车头先
End=m1; //现在只有这节车厢,所以他是尾车厢
}else //如果除了火车头还有其他车厢执行这里面的
{
m1->next=Head; //先把火车头后面的车厢挂到第一节车厢后面先 这里的head应该不是第一节车厢而是车头吗?
Head=m1; //再把整串火车挂回车头
}