单链表中L->next=s ; 和L=s;的区别:
根据链表的结构来分析~
struct Link{
int data;
struct *next;
};
然后我们定义一个 链表 Link L=NULL; 这句话的意思就说,我定义了一个指针 L,L指向内存中以Link 结构形式开辟的一块空间的地址,当你将NULL赋值给L,表示L不指向空间的任何位置。即,我们定义了一个空链表。
L->next 是典型的用指针访问数据的形式,L->next=s表示将s的地址记录进L的指针域中,而L=s则是将s的地址给L,行为是舍弃头节点,将s作为新的头节点。
如果你移动了头指针,那么头指针新位置之前的所有节点都将丢失,一般移动头节点都发生在销毁链表的时候,否则不会轻易的移动头指针,不过如果你是自定义的指针让他指向头节点,那是没关系的。。。。
L 其实只是指针,指向内存中的一个地址,这个地址被一个LINK 类型的数据占据,我们在 L=S 时,是修改了 L的指向,将L指向S所指向的地址,比如说,L 原来指向 北京 S原来指向上海,,,,,你将L=s,,,,,就是让L指向了上海 并没有影响北京, 但是由于北京没有指针指向他 所以我们就找不到她了 那么他就相当于被抛弃了.
L=s 是将S的首地址给了 L~ L->next=s 才是将s给了next.