赞
踩
用C语言实现单链表的插入和删除,主要用到了“双指针”的方法。
- void deleteNode_headed(Listnode* head,int deleteData)
- {
- Listnode* fast = head->next;
- Listnode* slow = head;
- while(fast != NULL) //遍历链表找到要删除的节点
- {
- if(fast->data == deleteData)//找到了则删除节点
- {
- slow->next = fast->next;
- free(fast);
- fast = NULL;
- head->data--;
- return;
- }
- fast = fast->next;
- slow = slow->next;
- }
- printf("The node is not found.\n");//找不到则打印提示信息
- return;
- }
- void insertNode_headed_head(Listnode* head, Listnode* nodeAdded)
- {
- head->data++;
- nodeAdded->next = head->next;
- head->next = nodeAdded;
- }
- void insertNode_headed_tail(Listnode* head, Listnode* nodeAdded)
- {
- head->data++;
- while(head->next != NULL)
- {
- head = head->next;
- }
- head->next = nodeAdded;
- nodeAdded->next = NULL;
- }
- void insertNode_headed_ordered(Listnode* head, Listnode* nodeAdded,int(*comp)(const void *, const void *))
- {
- Listnode* fast = head->next;
- Listnode* slow = head;
- while(fast != NULL) //寻找比插入节点大的节点
- {
- if(comp(fast,nodeAdded) > 0) //找到了则插入
- {
- slow->next = nodeAdded;
- nodeAdded->next = fast;
- head->data++;
- return;
- }
- fast = fast->next;
- slow = slow->next;
- }
- slow->next = nodeAdded; //没找到则插入到链表的尾部
- nodeAdded->next = NULL;
- head->data++;
- return;
- }
- Listnode* deleteNode_headless(Listnode* head,int deleteData)
- {
- if(head == NULL) //若为空链表,打印提示信息
- {
- printf("The node is not found.\n");
- return head;
- }
-
- Listnode* slow = head;
- Listnode* fast = head->next;
-
- if(slow->data == deleteData) //若删除的是第一个节点
- {
- free(slow);
- slow = NULL;
- head = fast;
- return head;
- }
-
- while(fast != NULL) //遍历链表找到要删除的节点
- {
- if(fast->data == deleteData)//找到了则删除节点
- {
-
- slow->next = fast->next;
- free(fast);
- fast = NULL;
- return head;
- }
- fast = fast->next;
- slow = slow->next;
- }
- printf("The node is not found.\n");//找不到则打印提示信息
- return head; //因为可能会将头节点赋值为NULL(只有一个节点,且需要删除的情况),
- } //又因为是值传递的头节点,所以要返回头节点
- Listnode* insertNode_headless_head(Listnode* head, Listnode* nodeAdded)
- {
- nodeAdded->next = head;
- return nodeAdded;
- }
- Listnode* insertNode_headless_tail(Listnode* head, Listnode* nodeAdded)
- {
- if(head == NULL) //判断是否是空链表
- {
- nodeAdded->next = NULL;
- return nodeAdded;
- }
- Listnode* temp = head;
- while(temp->next != NULL)
- {
- temp = temp->next;
- }
- temp->next = nodeAdded;
- nodeAdded->next = NULL;
- return head;
- }
- Listnode* insertNode_headless_ordered(Listnode* head, Listnode* nodeAdded,int(*comp)(const void *, const void *))
- {
- if(head == NULL) //判断是否为空链表
- {
- nodeAdded->next = NULL;
- return nodeAdded;
- }
- Listnode* slow = head;
- if(comp(slow,nodeAdded) > 0) //若插入节点比头节点小,则将插入节点作为头节点
- {
- nodeAdded->next = slow;
- return nodeAdded;
- }
- Listnode* fast = head->next;
- while(fast != NULL) //找到比插入节点大的节点
- {
- if(comp(fast,nodeAdded) > 0) //如果找到则插入
- {
- slow->next = nodeAdded;
- nodeAdded->next = fast;
- return head;
- }
- fast = fast->next;
- slow = slow->next;
- }
- slow->next = nodeAdded; //否则插入到链表尾部
- nodeAdded->next = NULL;
- return head;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。