今回のトピックは、LeetCodeのT19がリンクリスト(中)の下部からN番目のノードを削除することです。言うまでもなく、次のトピック:
リンクリストノードの定義:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
リンクリストのデータ構造を理解している限り、これは比較的単純な問題であり、解決策を考えることができます。
問題解決のアイデア:最初にリンクリストをトラバースしてリンクリストの長さを取得してから、リンクリストを変更するように設定します。以下に示すように
、最後から2番目のノードを削除する場合は、インデックスがsum-n-1であるノードの次を変更する必要があることがわかります。
次に、node.next = node.next.next;とします。コードをダウン:
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
//判空操作
if(head==null||head.next==null)
return null;
//定义两个指针,point用来操作链表,gethead用来表示对头结点的引用
ListNode point=head;
ListNode gethead=head;
int sum=0;//用来计算链表长度
//计算长度
while(head!=null){
sum++;
head=head.next;
}
int index=0; //计算当前遍历到第几个
//排除特殊情况,当sum=n的时候!
if(sum-n-1<0){
return gethead.next;
}
//通过point指针对链表进行操作
for(int i=0;i<sum;i++){
if(index==sum-n-1){
//修改next 达到删除的目的
point.next=point.next.next;
break;
}
index++;
point=point.next;
}
return gethead;
}
}
コードは上記のとおりですが、注意すべき点が2つあります。
1つ:空にする操作を実行することを忘れないでください。
2:sumとnの値が等しい場合、つまりリンクされたリストの長さで下からn番目を削除する場合、これら2つの値が等しい場合、sum-n-1は0未満になるため、次の変更操作は実行されないため、個別に説明する必要があります!
以上がこのトピックの説明です。何か問題がありましたら、ご指摘いただければ幸いです。