版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
首先介绍一下我的思路:
首先设置两个节点 p1 ,p2 都指向head节点,然后先让p2向后移动,直到p1和p2的间隔恰好为K的时候,p1和p2一起向后移动,直到p2.next == null 的时候 那么p1所指的结点就是要删除的结点。
public class deleteRepatNode {
public static class Node
{
int val;
Node next= null;
public Node(int val)
{
this.val = val;
}
//为了输出 重写toString方法
public String toString()
{
StringBuilder sb = new StringBuilder();
Node nnext = next;
while(nnext != null)
{
sb.append(nnext.val);
nnext = nnext.next;
}
return sb.toString();
}
}
//传入链表的头节点 和 倒数第K
public static Node find(Node head,int k)
{
if(head == null || k<=0)
{
return null;
}
Node p1 = head;
Node p2 = head;
int count = 1;
while(p2.next!=null && count < k)
{
p2=p2.next;
count++;
}
while(p2.next != null)
{
p2 = p2.next;
p1 = p1.next;
}
return p1;
}
public static void main(String[] args) {
int[] arr ={1,2,3,4,5};
Node head = new Node(arr[0]);
Node p = head;
for(int i = 1;i<arr.length;i++)
{
p.next = new Node(arr[i]);
p = p.next;
}
Node obj = find(head,3);
System.out.println(obj.val);
}
}
如果有疑问的话,评论就行,我会经常看!!!!