删除链表的倒数第K个节点(每日一道算法题)
来源:互联网 发布:javascript全选 编辑:程序博客网 时间:2024/05/14 17:26
单向链表,删除它的倒数第K个节点
//节点类package LinkedList;/** * @author:MindMrWang *2017年11月22日 *:function:链表节点 */public class Node { public int value; public Node next; public Node() { } public Node(int data) { this.value = data; }}
public static Node remove(Node head,int k) { if(head==null||k<1) {//当head为空或者K<1,说明没有倒数第K个节点。 throw new RuntimeException("your LinkedList has none the last k Node"); } Node cur = head; while(cur != null) {//从第一个节点开始遍历,若不为空,k-- k--; cur = cur.next; } if(k>0) { throw new RuntimeException("your LinkedList has none the last k Node"); } if(k==0) { head = head.next;//如果k为零,那么倒数第k个元素就是头结点,所以将头结点去除,将head指向head.next } if(k<0) {//当K小于零的时候我们想要删除倒数第k个节点,就要知道第N-k个节点(倒数第K个节点的前一个节点) cur = head;//第一次遍历cur位置改变了,所以要重新赋值 while(++k != 0) {//我们第一次遍历的时候K为k-N,它和N-k为相反数,所以将节点进行第二次从头结点遍历 cur = cur.next; //每次遍历加1,当它K为0的时候他就移动到了N-k的位置不用 } cur.next = cur.next.next; } return head; }
双向链表,删除它的倒数第K个节点
package LinkedList;/** * @author:MindMrWang *2017年11月22日 *:function:双向节点 */public class DoubleNode { int value; DoubleNode last; DoubleNode next; public DoubleNode(int data) { this.value = data; }}
//这个是双向链表的删除方法,大体思路和上面相同public static DoubleNode remove2(DoubleNode head,int k) { if(head==null||k<1) {//当head为空或者K<1,说明没有倒数第K个节点。 throw new RuntimeException("your LinkedList has none the last k Node"); } DoubleNode cur = head; while(cur != null) {//从第一个节点开始遍历,若不为空,k-- k--; cur = cur.next; } if(k>0) { throw new RuntimeException("your LinkedList has none the last k Node"); } if(k==0) { head = head.next; head.last = null; } if(k<0) { cur = head; while(++k!=0) { cur = cur.next; } cur.next = cur.next.next; if(cur.next!=null) { cur.next.next = cur; } } return head; }
参数书籍《程序员代码面试指南》
阅读全文
1 0
- 删除链表的倒数第K个节点(每日一道算法题)
- 链表之删除单链表倒数第K个节点
- 链表之删除双链表倒数第K个节点
- 算法优解(5)-删除单链表的倒数第k个节点
- 删除链表倒数k个节点
- 链表倒数第k个节点
- 链表倒数第k个节点
- 链表倒数第k个节点
- 链表倒数第K个节点
- 链表倒数第k个节点
- 链表倒数第k个节点
- 链表倒数第K个节点
- 链表问题(1)-- 在单链表和双链表中删除倒数第K个节点
- 删除单链表倒数第K个节点
- 删除链表中倒数第k个节点
- 单链表删除倒数第k个节点
- 删除链表中倒数第K个节点,
- 删除倒数第k个节点
- tkinter实现屏幕截图
- vue过渡动画实现原理
- Java 访问修饰符
- android 实现简单的一级购物车
- php函数相关(2):动态函数、函数的执行权与交回、函数的返回值
- 删除链表的倒数第K个节点(每日一道算法题)
- 动态代理---JDK
- scp命令:linux上本地文件和服务器文件的上传下载,Permission denied
- pygame+threading编写音乐播放器
- Android学习笔记二—应用技巧
- 维尼吉亚密码
- Mycat 启动失败 java.net.MalformedURLException: Local host name unknown:
- RecyclerView
- Extjs6.2 去除form组件中的textfield里面input的边框