1.单链表
结点类型描述:
strcut Node{
int date;
Node* next;
};
单链表逆序:
Node* reverNode(Node* head)
{
Node* pre = NULL, *curr = head;
while(curr)
{
Node* next = curr->next;
curr->next = pre;
pre = curr;
curr = next;
}
return pre;
}
单链表插入:
将指针q指向的新结点插入到指针p指向的单链表结点之后: q->next = p->next; p->next = q;
单链表删除:
//value为要删除结点的data值
Node* deleteNode(Node* head,int value)
{
if(NULL == head)
return NULL;
Node* q = head; *pre = NULL;
while(q != NULL && q->data != value)
{
pre = q;
q = q->next;
}
if(q == NULL) //没有找到
return head;
if(pre == NULL) //头指针指向的结点的值等于value
{
pre = q;
q = q->next;
free(pre);
return q;
}
pre->next = q->next;
free(q);
return head;
}
2.双链表
结点类型描述:
strcut Node{
int date;
Node* next,*pre;
};
双链表插入:
在双链表中p所指的结点之后插入结点s:
1.s->next = p->next;
2.p->next->pre = s;
3.s->pre = p;
4.p->next = s;
双链表删除:
删除双链表中结点p的后继结点q:
1.p->next = q->next;
2.q->next->pre = p;
3.free(q);