博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
左神算法书籍《程序员代码面试指南》——2_03删除链表的中间节点和a/b处的节点...
阅读量:4541 次
发布时间:2019-06-08

本文共 2297 字,大约阅读时间需要 7 分钟。

【题目】

给定链表的头节点head,实现删除链表的中间节点的函数。
例如:
不删除任何节点;
1->2,删除节点1;
1->2->3,删除节点2;
1->2->3->4,删除节点2;
1->2->3->4->5,删除节点3;
进阶:
给定链表的头节点head、整数a和b,实现删除位于a / b处节点的函数。
例如:
链表:1->2->3->4->5,假设a / b的值为r。
如果r等于0,不删除任何节点;
如果r在区间(0,1 / 5]上,删除节点1;
如果r在区间(1 / 5,2 / 5]上,删除节点2;
如果r在区间(2 / 5,3 / 5]上,删除节点3;
如果r在区间(3 / 5,4 / 5]上,删除节点4;
如果r在区间(4 / 5,1]上,删除节点5;
如果r大于1,不删除任何节点。
【题解】
原题:
使用快慢指针,当快指针到达链表尾部,则慢指针就是处于中间位置
进阶:
使用快慢指针求出链表长度,然后去确定a/b的位置

 

1 #include 
2 3 using namespace std; 4 5 struct Node 6 { 7 int val; 8 Node* next; 9 Node(int a = 0) :val(a), next(nullptr) {}10 };11 12 Node* deleteMid(Node* head)13 {14 if (head == nullptr || head->next == nullptr)15 return head;16 if (head->next->next == nullptr)17 return head->next;18 Node* p = head;19 Node* q = head->next->next;20 while (q && q->next)21 {22 p = p->next;23 q = q->next->next;24 }25 p->next = p->next->next;26 return head;27 }28 29 Node* deleteA_B(Node* head, int a, int b)30 {31 32 if (head == nullptr || head->next == nullptr)33 return head;34 35 //使用双向链表求出链表长度36 int n = 0;37 Node* p = head;38 Node* q = head;39 while (q->next && q->next->next)40 {41 n++;42 p = p->next;43 q = q->next->next;44 }45 if (q->next == nullptr)46 n = 2 * n;47 else48 n = 2 * n + 1;49 int k = (double)a / (double)b * double(n) + 0.5;//向上取整50 p = head;51 while (--k)52 {53 p = p->next;54 }55 p->next = p->next->next;56 return head;57 }58 59 template
60 void printList(T head)61 {62 T p = head->next;63 while (p)64 {65 cout << p->val << "->";66 p = p->next;67 }68 cout << endl;69 }70 71 int main()72 {73 Node* head = new Node();74 Node* p = head;75 for (int i = 1; i < 6; ++i)76 {77 Node* q = new Node(i);78 p->next = q;79 p = q;80 }81 //p = head;82 //printList(p);83 //p = head;84 //p = deleteMid(p);85 //printList(p);86 //p = head;87 //p = deleteA_B(p, 1, 5);88 //printList(p);89 p = head;90 p = deleteA_B(p, 2, 5);91 printList(p);92 93 return 0;94 }

 

转载于:https://www.cnblogs.com/zzw1024/p/11181454.html

你可能感兴趣的文章
课堂练习
查看>>
如何使VS2008 调试网站的根目录和IIS调试的一致?
查看>>
Apple 企业开发者账号&邓白氏码申请记录
查看>>
[bzoj5457]城市_dsu on tree
查看>>
[计蒜客T2237]魔法_树
查看>>
2018.10.19 NOIP训练 游戏问题(分组背包)
查看>>
01背包
查看>>
一道面试题关于js中添加动态属性
查看>>
结对编程项目——四则运算
查看>>
XML分页
查看>>
input、raw_input区别,运算符,运算优先级,多变赋值方式
查看>>
grpc python quickstart
查看>>
oracle异常处理
查看>>
scrapy下载中间件,UA池和代理池
查看>>
NOIP2017 宝藏 题解报告【状压dp】
查看>>
HDU 6357.Hills And Valleys-动态规划(区间翻转l,r找最长非递减子序列)
查看>>
从零开始,让你的框架支持CocoaPods
查看>>
memcached部署memcached环境及PHP扩展
查看>>
rvm 安装后的补充工作:source $HOME/.profile
查看>>
Oracle常见等待事件
查看>>