#include <stdio.h>
#include <stdlib.h>
typedef struct l
{
int value;
struct l* next;
}Link;
//////////判空
int Empty(const Link* Head)
{
if(Head->next==NULL)return 0;
else return 1;
}
//////////删除第i个节点
void Delete(Link *Head,int i)
{
Link *q=Head;
while(--i)//i=1时不执行,即q=Head;
{
q=q->next;
}
q->next=q->next->next;
}
/////////在第i个节点前插入 节点K
void Insert(Link *Head,int i,Link *K)
{
Link *q=Head;
while(--i)//i=1时不执行,即q=Head;
{
q=q->next;
}
q->next=K;
K->next=q->next;
}
关于链表的头结点作用问题,普遍共识是:
方便在第1个位置进行插入、删除操作时同其他位置一样。加了头结点之后,插入、删除都是在后继指针next上进行操作,不用动头指针;若不加头指针的话,在第1个位置插入或者删除第1个元素时,需要动的是头指针。
但是自己尝试性写了一下,发现似乎并不是这样,感觉似乎不设头结点也不用对第一个节点的插入和删除额外处理。我感觉应该是出了问题,但是自己一时没想明白哪里出了问题,望指正