堅持堅持!用Java寫出刪除一個連結串列的倒數第N個節點,並返回頭節點(N總是可達的)
這個題目有個前提條件就是N總是可達的,所以直接省去了一種情況(N不可達時的情況)
思路:
資料結構裡面首先給定兩個指標p和q分別都指向這個連結串列的頭節點,然後若想求出這個連結串列的倒數第N個節點,方法就是先讓p向後挪N個位置,q不動。
因為N總是可達的,所以會有倆種情況,
1、這個連結串列就只有N個節點
2、這個連結串列有大於N個節點
如果是第一種情況,則需要刪除的倒數第N個節點就是頭結點,所以head=head.next;刪除頭結點;
如果是第二種情況,則p繼續向後挪動,q也緊跟著向後挪動,此時當p向後挪動到連結串列尾部時停止,此時q指的位置就是該連結串列的倒數第N個節點,所以q.next=q.next.next;即刪除了該節點,程式碼如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode p=head;
ListNode q=head;
for(int i=0;i<n;i++){
p=p.next;
}
if(p==null){
head=head.next;
return head;
}
while(p.next!=null){
p=p.next;
q=q.next;
}
q.next=q.next.next;
return head;
}
}