链表操作的技巧
1.理解指针
将摸个变量赋值给指针,实际上就是将这个变量的地址赋给指针,或者,指针中存储了这个变量的地址,指向了这个变量,所以可以通过指针找到这个变量。
2.内存泄漏或指针丢失
删除链表节点时,也要手动释放内存空间,否则会出现内存泄漏的问题。
在插入结点时,应该先将x结点的下一个指向p的下一个b结点,然后再将p的下一个结点赋为x结点
这样写会出现指针丢失:
a->next=x;
x->next=a->next;
这么写是对的:
x->next=a->next;
a->next=x;
在插入结点时,一定要注意操作的顺序。
利用哨兵简化实现难度
插入结点:
如果在结点p后面插入一个新的结点:
new_node->next=p->next;
p->next=new_node;
如果要想一个空链表中插入第一个节点,需要特殊处理,其中head表示链表的头结点:
if(head==null){
head=new_node;
}
删除结点:
单链表的删除:
p->next=p->next->next;
如果要删除链表中的最后一个结点,也是一种特殊情况:
if(p->next==null){
p=null;
}
我们可以看出,针对链表的插入、删除操作,需要对插入第一个结点和删除最后一个结点的情况进行特殊处理。这样代码实现起来就会很繁琐,不简洁,而且也容易因为考虑不全而出错。