/*
* 删除链表节点.cpp
*
* Created on: 2018年4月13日
* Author: soyo
*/
#include<iostream>
using namespace std;
struct node
{
int data;
node * next;
};
node * create_head(node *p,int v)
{
p=new node;
p->data=v;
p->next=NULL;
return p;
}
node * add_list(node*head,int n)
{
node *p,*p1;
p=head;
p1=new node;
p1->data=n;
p1->next=NULL;
while(p->next!=NULL)
p=p->next;
p->next=p1;
return head;
}
void println(node *head)
{
if(head==NULL)
return;
while(head!=NULL)
{
cout<<head->data<<" ";
head=head->next;
}
cout<<endl;
}
void deletNode(node**head,node*deleteNode)
{
if(head==NULL||deleteNode==NULL)
return;
if(deleteNode->next!=NULL) //要删除的结点不是尾结点
{
node *nextNode=deleteNode->next;
deleteNode->data=nextNode->data;
deleteNode->next=nextNode->next;
delete nextNode;
nextNode=NULL;
}
else if(*head==deleteNode) //只有一个结点
{
delete deleteNode;
deleteNode=NULL;
*head=NULL;
}
else
{
node *p=*head;
while(p->next!=deleteNode) //删除的结点为尾结点
{
p=p->next;
}
p->next=NULL;
delete deleteNode;
deleteNode=NULL;
} }
int main()
{
node *p,*head;
int data=;
head=create_head(p,data);
int a[]={,,,,,};
int c=sizeof(a)/sizeof(int);
for(int i=;i<c;i++)
{
head=add_list(head,a[i]);
}
println(head);
node *deNode=head;
while(deNode->data!=)
{
deNode=deNode->next;
}
node**Head;
Head=&head;
deletNode(Head,deNode); //删除值为7的结点
println(head);
int a1=;
int *p1;
p1=&a1;
cout<<*p1<<endl;
int **p2;
p2=&p1;
cout<<**p2<<endl; }

结果:

C++实现O(1)时间内删除链表结点的更多相关文章

  1. 【编程题目】在 O(1)时间内删除链表结点

    60.在 O(1)时间内删除链表结点(链表.算法).题目:给定链表的头指针和一个结点指针,在 O(1)时间删除该结点.链表结点的定义如下:struct ListNode{int m_nKey;List ...

  2. 数据结构——算法之(027)( 在O(1)时间内删除链表结点)

    [申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出. 联系邮箱:Mr_chenping@163.com] 题目:在O(1)时间内删除链表结点.且不知道链表头 题目分析: 1.把要删除节点的下 ...

  3. (剑指Offer)面试题13:在O(1)时间内删除链表结点

    题目: 在给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间内删除该结点.链表结点与函数的定义如下: struct ListNode{ int val; ListNode* next; } ...

  4. P13在O(1)时间内删除链表结点

    package offer; //在 O(1)时间删除链表结点 public class Problem13 { public static void main(String[] args) { Li ...

  5. 在O(1)时间内删除链表结点 【微软面试100题 第六十题】

    题目要求: 给定链表的头指针和一个结点指针,在O(1)时间删除该结点. 参考资料:剑指offer第13题. 题目分析: 有几种情况: 1.删除的结点是头结点,且链表不止一个结点: 2.删除的结点是头结 ...

  6. 第六十题(在O(1)时间内删除链表结点)

    题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点. 思路:将待删除节点下一个节点的数据赋给当前节点.删除下一个节点就可以.

  7. JZ-069-在 O(1) 时间内删除链表节点

    在 O(1) 时间内删除链表节点 题目描述 在 O(1) 时间内删除链表节点. 方案:如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复 ...

  8. 剑指Offer面试题:12.在O(1)时间删除链表结点

    一.题目:在O(1)时间删除链表结点 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 原文采用的是C/C++,这里采用C#,节点定义如下: public class ...

  9. 【面试题013】在O(1)时间删除链表结点

    [面试题013]在O(1)时间删除链表结点  我们要删除结点i,我们可以把结点i的下一个结点j的内容复制到结点i,然后呢把结点i的指针指向结点j的下一个结点.然后在删除结点j. 1.如果结点i位于链表 ...

随机推荐

  1. 微信小程序,不同的输入框显示

    <!--pages/index/Component/TextInput/TextInput.wxml--> <view class="viewTitle"> ...

  2. iOS数据持久化存储

    本文中的代码托管在github上:https://github.com/WindyShade/DataSaveMethods 相对复杂的App仅靠内存的数据肯定无法满足,数据写磁盘作持久化存储是几乎每 ...

  3. reason: '*** setObjectForKey: object cannot be nil (key: 1)'-crash!

    [self.imageDownloadsInProgress setObject:iconDownloader forKey:[NSNumber numberWithInteger:tag]]; 字典 ...

  4. Material Theme

    Material Theme提供了一下功能: 1.系统widgets可以设置调色板 2.系统widgets的触摸反馈 3.Activity过渡动画 你可以根据你品牌的色彩来定义Material The ...

  5. pycharm索引index时间很长的原因

    pycharm进行索引index的目的时代码自动补全,当引入新的插件时,就会增加索引时间,插件越多,索引时间越长 没有好的解决办法,除非增加硬件:或者不使用代码自动补全功能

  6. VMware Workstation 虚拟机设置连接U盘

    首先确保主机有开启"VMware USB Arbitration Service"服务,而且在执行中. 如图:(我的系统是win8.1 ) 在VMware Workstation虚 ...

  7. weexapp 开发流程(三)其他页面创建

    1.首页 (1)轮播图 步骤一:创建 轮播图 组件(Slider.vue) src / assets / components / Slider.vue <!-- 轮播图 组件 --> & ...

  8. Linux-----Ubuntu设置开机启动模式

  9. vimrc 避免中文乱码配置

    et smsyntax onset ts=4set sts=4set sw=4set hlsearchset rulerset backspace=indent,eol,startset encodi ...

  10. iOS常用网络库收集

    一 ASIHttpRequest二 AFNetworking 三 AFDownloadRequestOperationA progressive download operation for AFNe ...