链表插入删除操作

243 阅读1分钟

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);