#include"stdio.h"
#include"stdlib.h"
#include"iostream"
using namespace std; struct ListNode
{
int m_Value;
ListNode* m_pNext;
}; ListNode* CreateListNode(int value)
{
ListNode* pNode=new ListNode();
pNode->m_Value=value;
pNode->m_pNext=nullptr; return pNode;
} void ConnectListNodes(ListNode* pCurrent,ListNode* pNext)
{
if(pCurrent==nullptr)
{
cout<<"Error to connect two nodes."<<endl;
exit();
}
pCurrent->m_pNext=pNext;
} void PrintListNode(ListNode* pNode)
{
if(pNode==nullptr)
{
cout<<"The node is nullptr."<<endl;
}
else
{
cout<<"the value in node is: "<<pNode->m_Value<<endl;
}
} void PrintList(ListNode *pHead)
{
cout<<"PrintList starts."<<endl; ListNode* pNode=pHead;
while(pNode!=nullptr)
{
cout<<pNode->m_Value<<" ";
pNode=pNode->m_pNext;
}
cout<<endl<<"PrintList ends."<<endl;
} void DestroyList(ListNode* pHead)
{
ListNode* pNode=pHead;
while(pNode!=nullptr)
{
pHead=pHead->m_pNext;
delete pNode;
pNode=pHead;
}
} void AddToTail(ListNode** pHead,int value)
{
ListNode* pNode=CreateListNode(value);
if(pHead==nullptr || *pHead==nullptr)
{
*pHead=pNode;
}
else
{
ListNode* pTemp=*pHead;
while(pTemp->m_pNext!=nullptr)
pTemp=pTemp->m_pNext;
pTemp->m_pNext=pNode;
}
} void RemoveNode(ListNode** pHead,int value)
{
if(pHead == nullptr || *pHead == nullptr)
return; ListNode* pToBeDeleted = nullptr;
if((*pHead)->m_Value == value)
{
pToBeDeleted = *pHead;
*pHead = (*pHead)->m_pNext;
}
else
{
ListNode* pNode = *pHead;
while(pNode->m_pNext != nullptr && pNode->m_pNext->m_Value != value)
pNode = pNode->m_pNext; if(pNode->m_pNext != nullptr && pNode->m_pNext->m_Value == value)
{
pToBeDeleted = pNode->m_pNext;
pNode->m_pNext = pNode->m_pNext->m_pNext;
}
} if(pToBeDeleted != nullptr)
{
delete pToBeDeleted;
pToBeDeleted = nullptr;//防止指正悬挂
}
}
//O(1)复杂度
void DeleteNode(ListNode** pHead,ListNode* pToBeDeleted)
{
if(*pHead==nullptr || pToBeDeleted==nullptr)
return;
if(pToBeDeleted->m_pNext!=nullptr)
{
ListNode* pNext=pToBeDeleted->m_pNext;
pToBeDeleted->m_pNext=pNext->m_pNext;
pToBeDeleted->m_Value=pNext->m_Value;
delete pNext;
pNext=nullptr;
}
else if(pToBeDeleted==*pHead)
{
delete pToBeDeleted;
pToBeDeleted=nullptr;
*pHead=nullptr;
}
else
{
ListNode* pNode=*pHead;
while(pNode->m_pNext!=pToBeDeleted)
pNode=pNode->m_pNext;
pNode->m_pNext=nullptr;
delete pToBeDeleted;
pToBeDeleted=nullptr;
}
} ListNode* TheLastKthNode(ListNode* pHead,int k)
{
if(pHead==nullptr || k<=)
return nullptr;
ListNode* quickNode=pHead;
ListNode* slowNode=pHead;
int cnt=;
while(quickNode->m_pNext!=nullptr&&cnt<k)
{
quickNode=quickNode->m_pNext;
++cnt;
}
if(cnt<k)
return nullptr;
while(quickNode->m_pNext!=nullptr)
{
quickNode=quickNode->m_pNext;
slowNode=slowNode->m_pNext;
}
return slowNode;
} ListNode* MeetingNode(ListNode* pHead)
{
if(pHead==nullptr)
return nullptr;
ListNode* quickNode=pHead;
ListNode* slowNode=pHead; while(quickNode->m_pNext!=nullptr&&quickNode->m_pNext->m_pNext!=nullptr)
{
quickNode=quickNode->m_pNext->m_pNext;
slowNode=slowNode->m_pNext;
if(quickNode==slowNode)
break;
}
if(quickNode!=slowNode)
{
return nullptr;
}
return slowNode;
} ListNode* EntryNodeOfLoop(ListNode* pHead)
{
ListNode* meetingNode=MeetingNode(pHead);
if(meetingNode==nullptr)
return nullptr;
int nodesInLoop=;
ListNode* pTemp=meetingNode;
while(pTemp->m_pNext!=meetingNode)
{
pTemp=pTemp->m_pNext;
nodesInLoop++;
}
ListNode* quickNode=pHead;
ListNode* slowNode=pHead;
for(int i=;i<nodesInLoop;i++)
quickNode=quickNode->m_pNext;
while(slowNode!=quickNode)
{
quickNode=quickNode->m_pNext;
slowNode=slowNode->m_pNext;
}
return slowNode;
}

剑指offer——链表的更多相关文章

  1. 剑指Offer 链表中倒数第k个结点

    题目描述 输入一个链表,输出该链表中倒数第k个结点.     思路: 法1:设置2个指针p,q.p先移动k次,然后pq同时后移,p到链表尾尾的时候,q指向倒数第k个节点. 注意://需要考虑k=0,以 ...

  2. 剑指offer——链表中倒数第k个结点

    输入一个链表,输出该链表中倒数第k个结点. class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned ...

  3. 剑指Offer——链表中环的入口结点

    题目描述: 一个链表中包含环,请找出该链表的环的入口结点. 分析: 设置两个指针p1,p2, 两个指针都从链表的头部开始走,不过p1每次走一步,p2每次走两步. 直到相遇的时候,p2走的长度是p1的两 ...

  4. 剑指Offer——链表中倒数第k个节点

    Question 输入一个链表,输出该链表中倒数第k个结点. Solution 一种想法就是扫描两边,第一遍求出总的节点个数,第二遍从头开始走n-k个 第二种思想类似于fast-slow指针的方法,f ...

  5. 剑指offer——链表相关问题总结

    首先统一链表的数据结构为: struct ListNode { int val; struct ListNode *next; ListNode(int x) :val(x), next(NULL) ...

  6. python剑指offer 链表中环的入口节点

    题目: 一个链表中包含环,请找出该链表的环的入口结点. 思路: 先说个定理:两个指针一个fast.一个slow同时从一个链表的头部出发, fast一次走2步,slow一次走一步,如果该链表有环,两个指 ...

  7. 用js刷剑指offer(链表中倒数第k个结点)

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 牛客网链接 思路 设置两个指针,p,q,先让p走k-1步,然后再一起走,直到p为最后一个 时,q即为倒数第k个节点 js代码 // 空间复杂度1 ...

  8. 剑指offer 链表中环的入口位置

    题目描述 一个链表中包含环,请找出该链表的环的入口结点.   思路:这题需要知道a = c,然后head和slow每次走一步,相遇的时候就是第一个入口交点, 注意:for循环或者while循环之后,一 ...

  9. 剑指offer 链表中倒数第K个节点

    利用两个间隔为k的指针来实现倒数第k个 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ...

随机推荐

  1. 爬虫常用Xpath和CSS3选择器对比

    爬虫常用Xpath和CSS3选择器对比 1. 简介 CSS是来配合HTML工作的,和Xpath对比起来,CSS选择器通常都比较短小,但是功能不够强大.CSS中的空白符' '和Xpath的'//'都表示 ...

  2. django model ValueQuerySet QuerySet 转换成JSON

    这里我有4个字段需要使用外键,那么在调取数据的时候就可以使用两个'_'进行调取,当然条件必须需要从前端传进来 models.py class HostInfo(models.Model): host_ ...

  3. 六)iframe 及父子页面之间获取元素、方法调用

    http://www.w3school.com.cn/tags/tag_iframe.asp father.html <!DOCTYPE html> <html> <he ...

  4. JS Closure 闭包

    /*一.变量的作用域要理解闭包,首先必须理解Javascript特殊的变量作用域.变量的作用域无非就是两种:全局变量和局部变量.Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. ...

  5. Halcon标定与自标定

    Halcon标定:https://blog.csdn.net/niyintang/article/details/78752585 Halcon自标定:https://www.cnblogs.com/ ...

  6. 已经导入到VS工具箱中的DevExpress如何使用

    1.下载安装DevExpress控件(如DXperienceUniversal-11.1.12.exe),安装后路径:“C:\Program Files (x86)\DevExpress 2011.1 ...

  7. HBASE的优化、hadoop通用优化,Linux优化,zookeeper优化,基础优化

    HBase 的优化3.1.高可用在 HBase 中 Hmaster 负责监控 RegionServer 的生命周期,均衡 RegionServer 的负载,如果Hmaster 挂掉了,那么整个 HBa ...

  8. Replication--镜像+复制

    场景:主服务器:Server1从服务器:Server2订阅服务器: Server3镜像DB: RepDB配置:1>配置SERVER3为分发服务器,在Server3上指定发布服务器SERVER1和 ...

  9. EF修改model自动更新数据库

    最近用MVC+EF学习时遇到修改model后而数据库没更新报错,就在网上找关于数据迁移自动更新数据库的,折腾了大半天终于弄了出来 第一步:在程序包管理器控制台里: Enable-Migrations ...

  10. jquery.pagination参数释义

    参数名 参数说明 可选值 默认值callback 点击分页按钮的回调函数 函数 function(){return false;}current_page 初始化时选中的页码 数字 0items_pe ...