题目描述
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
解题思路
代码示例
public class Test {
public static void main(String[] args) {
//初始化node链表
//1->2->3->4->5
Node node = new Node(5);
for (int i=4; i>0; i--){
Node nodeTemp = new Node(i);
nodeTemp.next = node;
node = nodeTemp;
}
System.out.println("start_node-->"+node);
node = removeNodeByEndNum(node, 2);
System.out.println("end_node-->"+node);
}
private static Node removeNodeByEndNum(Node node, int n) {
//初始化两个指针
Node beforePointer = node;
Node afterPointer = node;
//第一个指针向前一定n个节点
while (n>0){
//当n>链表长度时,直接返回原链表
if (beforePointer == null){
return node;
}
beforePointer = beforePointer.next;
n--;
}
//当第一个指针遍历结束后,第二个指针指向的位置即为要删除的节点
while (beforePointer != null && beforePointer.next != null){
beforePointer = beforePointer.next;
afterPointer = afterPointer.next;
}
//根据第二个指针指向的位置删除节点
//如果不喜用该if-else,可以通过在链表起始位置增加空节点来解决
if (node == afterPointer){
//如果第二个指针位置没有变动则需要删除起始节点
node = node.next;
}else {
afterPointer.next = afterPointer.next.next;
}
return node;
}
}
//Node节点
class Node{
public Integer value;
public Node next;
public Node(Integer value) {
this.value = value;
}
@Override
public String toString() {
return "Node{" +
"value=" + value +
", next=" + next +
'}';
}
}
运行结果
▄█▀█●各位同仁,如果我的代码对你有帮助,请给我一个赞吧,为了下次方便找到,也可关注加收藏呀
如果有什么意见或建议,也可留言区讨论