删除链表的倒数第K个节点(每日一道算法题)
2017-11-22 11:20
253 查看
单向链表,删除它的倒数第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; }
参数书籍《程序员代码面试指南》
相关文章推荐
- 删除链表的中间节点(每日一道算法题)
- 左程云_算法与数据结构 — 链表问题 — 02在单链表和双链表中删除倒数第K个节点
- (算法)输出单链表的倒数第k个节点,删除特点的节点和从链表尾一次输出节点值
- 链表面试题逆序打印,删除无头非尾节点,非头位置插入,约瑟夫环,查找中间和倒数第k个节点
- 算法学习之旅,初级篇(29)-–链表中倒数第k个节点
- 每天一道算法题7 查找链表中倒数第k个结点
- 算法---输出单向链表中倒数第K个节点
- 算法与数据结构面试题(13)-求链表倒数第K个节点
- 左神的书——《程序员代码面试指南》之删除链表的倒数第k个节点 c++实现
- 微软算法100题13 查找单向链表倒数第K个节点
- 建立一个带附加头结点的单链表.实现测长/打印/删除结点/插入结点/逆置/查找中间节点/查找倒数第k个节点/判断是否有环
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
- 算法学习-----输出链表的倒数第k个节点
- 数据结构 在单链表和双链表中删除倒数第K个节点
- 删除链表中倒数第K个节点,
- 每天一道算法题——链表中倒数第k个结点
- 链表之删除单链表倒数第K个节点
- 链表问题 在单链表和双链表中删除倒数第K个节点
- 算法:查找链表中倒数第k个节点
- 找出单向链表中倒数第k个节点的算法