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