您好,登錄后才能下訂單哦!
找到倒數第n個結點的前一個結點,讓該結點的后繼為倒數第n個結點的后繼
子問題:找到倒數第n個結點的前驅
1.有兩個引用,第一個引用指向首節點,然后走n步
2.第二個結點指向首節點,此時兩結點之間隔了n-1個結點,保持這樣的距離,共同向后移動
3.當第一個引用到達尾節點時,第二個引用離尾節點有n-1個結點,
4.此時第二個結點為倒數第n+1個結點,即倒數第n個結點的前驅
特殊情況:
1.鏈表只有一個結點或者為空鏈表,直接返回空即可;
2.鏈表的長度剛好等于n,即刪除首節點,第一個引用從頭結點開始移動n步后,
第一個引用移動到了尾節點的下一個,即此時第一個引用為空,
出現第一個在移動n步后為空的情況時,說明要刪除的是首節點,直接將首節點定為首節點的下一個即可
public static ListNode removeNthFromEnd(ListNode head, int n) {
//如果鏈表本身為空或者只有一個結點,直接返回空即可
if(head==null||head.next==null){
return null;
}
ListNode cur=head;
ListNode pre=head;
for(int i=0;i<n;i++){
cur=cur.next;
}
if(cur==null){
head=head.next;
return head;
}
while(cur.next!=null){
cur=cur.next;
pre=pre.next;
}
pre.next=pre.next.next;
return head;
}
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。