コード:口語聴解作文-3


Remove Nth Node From End of List


LinkedListは私が最も軽視しやすい最も苦手な部分です.うまくやったと思っていたが、実はうまくいかなかった.つまり、実現できない.LinkedListにはポインタの概念があり、私はそれに興味を持っていましたが、少し理解しました.それをもとに今日はリンクリストについての質問が解けました...理解に苦しむ.まず,ノードとネストの概念はあまり頭に入らなかった.いいえ、次のノードに行くなんて知っています.でも不思議なのはなぜ書けないのかだからコード:口語の聴解の作文も練習します.いずれにしても、多くの人に知らないことを聞いて親切に教えてくれて、納得しました.今はもっと問題に触れて、問題を熟知するしかありません.
https://leetcode.com/problems/remove-nth-node-from-end-of-list

問題を見るとすぐに聞こえる考え:まず静かにしてください.深呼吸して円と矢印を見つめている.ここから感じてnの数字.後ろの2番目の感覚赤.アウトになる.すぐアウトになる.
この感覚を表現し、矢印の下を一目見て感覚的に取り除くには、矢印を3から5に移動させます.
current, .next, head. この3つはまず最も重要です
現在位置、現在位置が示す次の位置.そして最初のhead始まりは感じたこれを理解する隊員たちは苦労をたくさんした.やはり私は生まれながらにして幸せです.
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
        '''
        Input: head = [1,2,3,4,5], n = 2
        Output: [1,2,3,5]
        '''
        
        current = head  # current node -> head
        # current = current.next #current moves to next node
        length = 0
        while current: 
            length += 1 #total linkedlist length 
            current = current.next
        
        current = head
        
        if n == length:
            head = head.next
            return head
        
        for i in range(length - n - 1): # arrive at the point before we meet goal position
            current = current.next #3
        
        current.next = current.next.next
            #4              #5
            
        return head
まず現在位置を設定します.無条件設定何事にも初めがあれば必ず終わりがある.初期位置current=head.これはどういう意味ですか.今位置の一番目です.頭で決める.まず、1,2,3,4,5全部回ってしまった場合を考えてみましょう.だからwhileドアに入れてしかし、条件はヘッドに物がある場合に最後まで回転することです.これを回すと、1、2、3、4、5が印刷され、最後に次の指示が続き、5次がNoneになります.それと同时に长さが决まったこの子の役は1番2番...交換するたびに長さを測定します.私たちは後ろから2状態の子供を出さなければならないからです.それをするには、いくつかの道に着いたときに、その子から別の子に矢印を変えることを考えなければならないからです.次はFOR MOONがみんなを悩ませています後ろから何人かの子供を抜こうとすると、抜こうとする子供の前に電流が走ります.そして、その子に次の矢印をあげます.next.次を作ろうこれでやっと5そして先頭に戻って終わりました
問題は、
自分のやりたいことを表現できない.新しい言語を勉強して、頭の中に何かが浮かんでいるが、言葉が出ないような気がする.来る.まずこのもう一つの方法はrunnerテクニックで、速いポインタ、遅いポインタでやります.まず研究してみます.
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
        '''
        Input: head = [1,2,3,4,5], n = 2
        Output: [1,2,3,5]
        '''
 		current = ListNode(0)
        current.next = head
        #dummy > 1 > 2 > 3 > 4 > 5
        slow = fast = current
        
        
        
        for i in range(n):
            fast = fast.next
        
        while fast.next: 
            slow = slow.next 
            fast = fast.next
        
        slow.next = slow.next.next 
        
        return current.next
        
調べましたが、これが方法です.これをRunner技法といいます.走り方とは,1)早足の子と2)鈍足の子を利用して,逐次漸進的にリストを閲覧することである.そして、速く歩く子とゆっくり歩く子の間の距離は、探していたnのように開いて移動します.間隔を作成するには、headが開始される前にスタックノードを作成します.ここから、間隔を広げるために作ります.最初に試した無条件は最初からです.つまり、1から.このように解くこともできますが、例外を苦労して処理するには、後で速い子と遅い子の差を作ってから矢印の順序を変えて、ジャンプや間違いの回数が多い...この方法で作りました.for文では、まずfastを間隔で分け、while文を使ってゆっくりと後ろについていき、さっきのfor文間隔が止まったところからfast子を一つ一つ末尾に移動させ、fastが末尾に着いたとき、つまり5に達したとき、slow子は4をスキップしてゆっくりと5を教えます.next.次です.
そしてきれいなcurrent次のリターン
Linkedlist. これは実は簡単そうに見えますが、実現も簡単です.しかし、彼女は臆病で恐ろしい子だった.だから今日は日を決めてこれしかしなかった本当に一度も解決策を見ていないので、1行1行コードしたいだけです.無知で方向を考えない習慣を最大限に捨てなければならない.これにより、論理的にコードを記述できます.
以上