总结了几个重点:
1. 头插法关键代码:
p->next=head->next;
head->next=p;
2. 尾插法关键代码:
head=tail;
s->next=NULL;
tail->next=s;
tail=s;
3. 删除元素关键思路:
找到q->next为要删除的元素,然后q->next=q->next->next,之后对q->next的节点进行free操作(易漏)
结构体定义:
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
创建节点函数:
LNode *createNode(int x){
LNode *p=(LNode *) malloc(sizeof(LNode));
p->data=x;
p->next=NULL;
return p;
};
按值查找函数:
LNode *searchLNode(LNode *p,int x){
LNode *t=(LNode*)malloc(sizeof(LNode));
t=p;
while(t){
if(t->data==x)
return t;
else
t=t->next;
}
return NULL;
}
插入节点操作(头插法):
void insertList(LNode *&L,int x){
LNode *s;
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
}
插入节点操作(尾插法):
void insertList2(LNode *&L,int x){
LNode *p ,*s;
p=L;
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=NULL;
p->next=s;
p=s;
}
删除节点操作:
int searchAndDelete(LNode *&L,int x){
LNode *p,*q;
p=L;
while(p->next!=NULL){
if(p->next->data==x)
break;
p=p->next;
}
if(p->next==NULL){
return 0;
}
else
{
q=p->next;
p->next=p->next->next;
free(q);
return 1;
}
}
打印链表操作:
void printList(LNode *L){
LNode *p=L->next;
while(p){
printf("%d",p->data);
p=p->next;
}
}