第一次中等题完全靠自己写出击败100%的解法!!!
基本思路:
1.题目要求删除倒数第n个结点,那么我们先要知道链表的总长度
2.然后找出要删除结点在链表中的具体位置
3.在将删除的结点的左右结点个定义一个指针
4.然后直接left = right.next ,将右指针后的那段链表连接到left后面(这样就相当于跳过了那个想要删除的结点)
代码实现:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
//求出链表的长度
int length = getLength(head);
//如果删除的节点是头节点,那么直接输出head.next
if(length == n){return head.next;}
//定义一个边界指针,指向删除节点的左边界
ListNode ri = head ;
for(int i = 0;i < length - n + 1 ;i++){
ri =ri.next;
}
//定义一个边界指针,指向删除节点的右边界
ListNode le = head ;
for(int i = 0;i < length - n - 1 ;i++){
le = le.next;
}
//将左边界和右边界直接相连,这样就跳过了要删除的节点
le.next = ri;
return head;
}
//求链表长度的方法
public int getLength(ListNode head) {
int length = 0;
while (head != null) {
++length;
head = head.next;
}
return length;
}
}