首页 > 其他 > 详细

链表相关的操作

时间:2020-11-16 11:48:57      阅读:24      评论:0      收藏:0      [点我收藏+]
  1. 创建单项链表
  2. 创建单向无头链表
  3. 删除链表指定元素的节点
  4. 删除链表指定节点
typedef struct node {
    struct node* next;
    int data;
}Element;

一、创建一个单向链表

Element* createSingleLinkedList(int* arr,int size) {
    Element *head = NULL, *pre = NULL,*p = NULL;
    for (int i = 0; i < size; i++) {
        p = (Element*)malloc(sizeof(Element));
        if (p == NULL) {
            return NULL;
        }
        else {
            p->data = arr[i];
            p->next = NULL;
            if (head == NULL) {
                head = pre = p;
            }
            else {
                pre = pre->next = p;
            }
        }
    }
    return head;
}

二、创建单向无头链表

Element* createSingleLinkedWithoutHead(int *arr,int size) {
    Element *head = NULL,*pre = NULL,*p = NULL;
    p = (Element*)malloc(sizeof(Element));
    if (p == NULL) {
        return NULL;
    }
    p->data = -1;
    p->next = NULL;
    head = pre = p;
    for (int i = 0; i < size; i++) {
        p = (Element*)malloc(sizeof(Element));
        if (p == NULL) {
            return NULL;
        }
        p->data = arr[i];
        p->next = NULL;
        pre = pre->next = p;
    }
    return head;
}

三、删除链表中某些元素

普通删除

Element* removeVal(Element* head, int val) {
    for (Element* p = head, *pre = head; p != NULL;) {
        if (p->data == val) {
            if (p == head) {
                head = head->next;
                delete(p);
                p = pre = head;
            }
            else {
                pre->next = p->next;
                delete(p);
                p = pre->next;
            }
        }else{
            pre = p;
            p = p->next;
        }
    }
    return head;
}

递归删除

Element* removeElements(Element *head,int val) {
    if (head == NULL) {
        return head;
    }
    head->next = removeElements(head->next,val);
    return head->data == val ? head->next : head;
}

四、删除链表中指定的节点

void deleteNode(Element *node) {
    *node = *(node->next);
}

思路:需要考虑当前节点存储的不只是数据,下个节点的地址,还有当前节点的地址。将下个节点的数据与下个节点存储的地址赋值给当前节点

http://chuantu.xyz/t6/741/1605495288x1031866013.jpg

技术分享图片

 

链表相关的操作

原文:https://www.cnblogs.com/baizhuang/p/13984127.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!