C语言中带头结点的链表和不带头结点怎么实现,,有什么区别?

来源:百度知道 编辑:UC知道 时间:2024/05/05 07:21:23
RT

带头节点:head-> p1->p2->p3 ->p1->p2->p3-> p1.....
不带头节点: p1->p2->p3 ->p1->p2->p3-> p1.....

却别还不明显吗?带头节点可以方便,快速的定位链表第1个节点

比如循环链表的时候,删除p1 的时候:

head->next = p2;
p3->next = head->next; ok?
free(p1);
思路很清晰,链表开始的第1个节点现在就是head->next 即 p2

否则没有头节点:
p3->next = p1->next;
free(p1);
会不会有一种链表第1个节点到底是哪个的感觉?

当然单向循环这个不明显,如果你写个双向循环,就会很方便,麻烦,我就写单向吧``

就是方便,清晰,明了,也不是一定要用,要看情况,看需要对链表做什么操作,来决定要不要带头节点。你不写几个链表没法体会的。

祝你好运!~

网上大多数是带头结点的操作。不带头结点的链表可以这样理解:把带有头结点的链表的head变为存储数据的结点就ok了!下面的例子:
#include <stdlib.h>
#include<iostream.h>
#define OVERFLOW -2
typedef struct LNode
{int data;
struct LNode *next;
}*LinkList;
//void creat(LNode *l,int n)
void creat(LinkList &l,int n)
{
l=(LinkList)malloc(sizeof(LNode)); //*生成第一个节点
cout<<"creat l:";