链表——头结点式2

来源:互联网 发布:波导手机淘宝 编辑:程序博客网 时间:2024/05/17 03:38

上次主要讲了链表的建立和几种插入操作,今天再进行一些与链表相关的操作。
先来进行根据位置删除元素的操作:

Node *tmp = h;    int i;    for (i = 0; i < pos-1; i++)    {        if (tmp->next == NULL)            break;        tmp = tmp->next;    }Node *p = tmp->next;    tmp->next = p->next;    free(p);

与前面一样参数pos也是代表删除的位置,
然后我们也要进行与插入相同的操作,找到想删除的数的前一个数,用一个p来保存要删除的节点,然后将要删除节点的前一个节点直接指向它的下一个节点,然后将p释放掉,这样就完成了删除。

再来个根据数据删除节点:

Node *tmp = h;    while (tmp->next)    {        if (tmp->next->data == data)            break;        tmp = tmp->next;    }    if (tmp->next == NULL)        return FALSE;    Node *p = tmp->next;    tmp->next = p->next;    free(p);

与上面一样,归根结底都是要找到要删除节点的上一个元素再进行相关操作,然后的删除操作也是大同小异了。

下面是逆序:

Node *pre = h->next;    Node *cur = h->next->next;    Node *tmp;    while (cur)    {        tmp = cur->next;        cur->next = pre;        pre = cur;        cur = tmp;    }    h->next->next = NULL;    h->next = pre;

看到逆序我们会想到什么?逆序就是无非就是将各个节点指针的指向换个方向,并将原来的头指向NULL,head指向原来的尾。但如何实现这一过程呢,我们这里用到三个指针,第一个指针pre指向链表第一个元素,第二个指针cur先指向pre后面一个节点,第三个指针tmp作为用来调节cur的位置,每当pre与cur进行交换后就将cur指到tmp所在位置,即原先cur的下一个位置,然后pre再与cur进行交换操作。最后将原先的第一个节点指向NULL。便完成了逆序操作。

其他的一些操作,比如根据数据获取相关节点的位置等操作与以上也是大同小异,就不多说了。

原创粉丝点击