思路
1.遍历数组,统计个数,记为total
2.计算出需要被删除的节点 是正数第几个,记做order
3.遍历到order-1,,然后执行删除下一个节点的操作
这里遍历到order-1,是因为想要删除一个节点,需要操作的是它前一个节点的next
代码
/**
* 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) {
//获得总个数
//是做判断,判断是不是空,
//所以先判断,然后才能++,所以最开始就不能是0,因为并没有进行判断
int total=0;
ListNode cur=head;
while(cur!=null){
total++;
cur=cur.next;
}
//得到顺数第几个 用order表示
int order=total+1-n;
//遍历,走到 order-1的位置,然后执行删除下一个的操作
//做统计 统计当前共有几个,最开始指针指向head的时候已经有一个,所以初始值为1
cur=head;
int now=1;
while(now<order-1){
now++;
cur=cur.next;
}
//来到order-1的位置,删除后面一个元素
//先排除无法删除的情况
if (cur.next==null) {
head=null;
return head;
}
//特殊删除情况。删除头节点
if (order == 1) {
head=head.next;
return head;
}
cur.next=cur.next.next;
return head;
}
}
记录
总结
指针移动 并且count++ 之类的问题,,怎么个流程:
这得看是在做什么,
指针定义为cur,指针最开始指向首元节点
1.如果这个count是用来统计链表的个数,
统计个数大概思路:先判断是否为空,如果不为空,就c++,
所以,cur指向头节点,还未判断时,count初始值应设置=0
流程:
count=0
判断是否为空,不为空,count++
2.如果是在判断当前节点是否为x序号的节点
大概思路:指针指向这个节点,循环判断这个节点是不是x节点
所以指针的初始值就应该为1