链表的特殊查找
来源:互联网 发布:linux删除u盘文件 编辑:程序博客网 时间:2024/06/05 07:05
定义链表节点
public class ListNode { public int val; public ListNode next; public ListNode(int x){ val = x; next = null; }}
找出单链表中间位置节点
p与q指针同步,q若走不了两步了,p也不要走,因此只判断q是否能走两步即可。
public ListNode FindMidNode(ListNode first){ ListNode p = first, q = first; while(q!=null && q.next!=null && q.next.next!=null){ q = q.next.next; p = p.next; } return p;}
找到链表中倒数第k个结点,最后一个算作倒1
找到倒数第k个节点
p,q相差k步,等q走到null,p就是在倒数第k个节点上了。
原题来源:leetcode面试题15
public ListNode FindKReverseNode(ListNode first, int k){ ListNode p = first, q = first; for(int i = 0; q != null && i < k; q = q.next, i++); while(q != null){ p = p.next; q = q.next; } return p;}
删除链表中倒数第k个结点返回链表头,最后一个算作倒1
注意:
删除与查找的不同在于,查找定位到要查找的节点,但是删除却要定位到要删除的节点的前面的那个节点。
那么如果删除的是头结点和第二个结点该如何区分呢。1->2->null 删除倒数第一个和倒数第二个,如何区分。
保持一个p的前面节点pre,初始为null
最后判断pre是否为null,如果为null就是删除头结点,否则就是删除中间的某个节点(此时不会出现pre.next为空的情况,因为不会出现删除的节点是null的情况)
也就是说关键在于区分删除的是头节点还是第二节点即可
原题来源:leetcode19 Remove Nth Node From End of List
public ListNode RemoveKReverseNode(ListNode first, int k){ ListNode pre = null, p = first, q = first; int i = 0; for(;q != null && i < k; q = q.next,i++); if(i < k) return null;//当给出的k不得当,大于链表长度 while(q != null){ q = q.next; p = p.next; } if(pre == null) first= first.next; else pre.next = pre.next.next; return first;}
0 0
- 链表的特殊查找
- 特殊容器:符号表-为查找而生的结构
- jQuery 查找含有特殊字符的元素
- Word查找的通配符和特殊字符!
- 蓝桥杯 特殊回文数的查找
- OfferKiller 特殊二维数组的快速查找
- excel中的查找替换换行的特殊字符的输入
- 特殊二维数组查找
- CI9.5-特殊字符串数组的二分查找
- sql在进行模糊查找时特殊字符的转义
- Search a 2D Matrix 特殊二维矩阵的查找
- 【读书笔记】iOS-Xcode-查找特殊字符的方法
- Search a 2D Matrix II 特殊数组的查找
- 【数据库SQL】查找特殊字符语句的使用案例
- 特殊的线性表-队列-链队列
- 链表的查找
- 特殊的交叉表
- 特殊二维数组数据查找
- 预测算法归纳与总结
- 第二周项目五--多文件组织数据成员
- J2EE 环境准备
- 禁用myeclipse updating indexes与大幅优化myeclipse的速度&关闭自动更新
- SharePoint Server 2013 中管理搜索架构
- 链表的特殊查找
- [LeetCode 101]Symmetric Tree
- Hadoop简介
- 物联12:电子标签天线
- 初涉HTML一 ---编辑器sublime test 篇
- php开发之数组(一)
- ios抽屉视图的实现
- hadoop设计基础和目标-笔记01
- HDU 5191 Building Blocks (模拟)