在 O(1) 的时间内删除单链表的结点
来源:互联网 发布:mac装windows10系统 编辑:程序博客网 时间:2024/05/22 03:30
- 分析:之所以是 O(n) ,是因为我们要从头开始查找(因为我们要找到删除结点的前一个结点)。
- 如果我们把下一个结点的值复制到需要删除的结点上,然后删除下一个结点,这样就相当于把原结点删掉了。
- 注意:
如果要删除的链表是在链表的尾部,那么我们就需要重新顺序查找了
如果链表中只有一个结点那么,那么我们删除结点后,需要把头节点的指针置空。
#include <iostream>using namespace std;typedef struct NodeList{ int data ; NodeList * next;}NodeList;typedef NodeList * LinkList;void initNode(LinkList * head){ * head = (LinkList)malloc(sizeof(NodeList)); (* head)->data = 0; (* head)->next = NULL;}void insertNode(LinkList head, int data){ if(head == NULL) return; LinkList p = (LinkList)malloc(sizeof(NodeList)); p->data = data; p->next = NULL; LinkList f = head; while (f->next != NULL) { f = f->next; } f->next = p;}void printfList(LinkList head){ LinkList p = head->next; while(p != NULL){ cout<<p->data; p = p->next; }}void destoryNode(LinkList head){ LinkList p,q; p = head->next; while(p != NULL){ q = p->next; free(p); p = q; } head->next = NULL;}void deleteNode(LinkList* head, LinkList pToBeDeleted){ if((*head) == NULL || pToBeDeleted == NULL) return; //删除的结点不是尾节点 if(pToBeDeleted->next != NULL){ LinkList next = pToBeDeleted->next; pToBeDeleted->next = next->next; pToBeDeleted->data = next->data; free(next); next = NULL; }else if((*head)->next == pToBeDeleted){ // 只有一个结点 free(pToBeDeleted); (*head)->next = NULL; pToBeDeleted = NULL; }else{ // 如果删除的是尾节点 LinkList p = (*head)->next; while(p->next != pToBeDeleted){ p = p->next; } p->next = NULL; free(pToBeDeleted); pToBeDeleted = NULL; }}int main(int argc, const char * argv[]) { LinkList head ; initNode(&head); insertNode(head, 1); deleteNode(&head, head->next); printfList(head); return 0;}
0 0
- 在 O(1) 的时间内删除单链表的结点
- 在O(1)时间内删除单链表结点
- 在O(1)时间内删除单链表结点
- 在O(1)时间内删除单链表结点
- 在o(1)时间内删除链表中结点
- 在O(1)时间内删除链表结点
- 在O(1)时间内删除链表结点
- 在O(1)时间内删除链表指定结点
- 在O(1)时间内删除单向链表结点
- 60 在 O(1)时间内删除链表结点
- 在O(1)时间内删除链表结点
- 剑指offer--在O(1)时间内删除链表结点
- java 在o(1)时间内删除链表结点
- 13在O(1)时间内删除链表结点python
- 数据结构——算法之(027)( 在O(1)时间内删除链表结点)
- 第六十题(在O(1)时间内删除链表结点)
- 在O(1)时间内删除链表结点 【微软面试100题 第六十题】
- 微软100题(60)在O(1)时间内删除链表结点
- Pyton爬虫实现豆瓣登陆
- 1032. 挖掘机技术哪家强(20)
- ED and SVD
- linux命令行快捷键的功能
- NOI2015 寿司晚宴 状压DP
- 在 O(1) 的时间内删除单链表的结点
- UVALive 4329 Ping pong, beijing 2008
- 创建Connection的多种方法
- 未来具有潜力的行业
- (转)Activity和Fragment传递数据的两种方式
- redis
- 【面试题】剑指Offer-12-打印1到N最大的数字
- HDU 3790 最短路径问题(单源最短路---Dijkstra算法)
- 【Java】内存分配的问题