Inhaltsverzeichnis
1. Löschen Sie alle Knoten, deren Wert der Schlüssel in der verknüpften Liste ist
Methode 1: Normales Löschen, der Kopfknoten wird separat besprochen
Methode 2: Methode des virtuellen Kopfknotens
2. Umgekehrte verknüpfte Liste
Methode 1: Doppelzeiger-Iteration
3. Der Zwischenknoten der verknüpften Liste
Methode: schnelle und langsame Zeigermethode
4. Der letzte k-te Knoten in der verknüpften Liste
Methode: schnelle und langsame Zeigermethode
5. Führen Sie zwei geordnete verknüpfte Listen zusammen
Vorwort:
Wenn Sie die Datenstruktur gut lernen möchten, müssen Sie die Fragen üben. Wir müssen nicht nur mehr Fragen studieren, sondern sie auch gut studieren! Aus diesem Grund habe ich eine Reihe von Must-Do-Fragensammlungen mit jeweils etwa 5 Fragen gestartet. Dies ist der erste Multiple-Choice-Artikel und die Serie wird von Zeit zu Zeit aktualisiert, also bleiben Sie dran!
1. Löschen Sie alle Knoten, deren Wert der Schlüssel in der verknüpften Liste ist
Entfernen Sie verknüpfte Listenelemente https://leetcode.cn/problems/remove-linked-list-elements/
Titel Beschreibung:
Bei einem gegebenen Kopfknoten einer verknüpften Liste head
und einer Ganzzahl val
löschen Sie bitte alle erfüllten Node.val == val
Knoten in der verknüpften Liste und geben Sie einen neuen Kopfknoten zurück .
Methode 1: Normales Löschen, der Kopfknoten wird separat besprochen
public ListNode removeElements(ListNode head, int val) {
while(head!=null&&head.val==val){
head=head.next;
}
if(head==null){
return head;
}
ListNode cur=head;
while (cur.next!=null){
if(cur.next.val==val){
cur.next=cur.next.next;
}else {
cur=cur.next;
}
}
return head;
}
Analysieren:
aber der Hauptknoten wird fehlen
Methode 2: Methode des virtuellen Kopfknotens
public ListNode removeElements(ListNode head, int val) {
if(head==null){
return head;
}
ListNode newnode=new ListNode();
newnode.next=head;
head=newnode;
ListNode cur=head;
while (cur.next!=null){
if(cur.next.val==val){
cur.next=cur.next.next;
}else {
cur=cur.next;
}
}
return head.next;
}
Analysieren:
Methode 3: Rekursion
class Solution {
public ListNode removeElements(ListNode head, int val) {
if (head == null) {
return head;
}
head.next = removeElements(head.next, val);
return head.val == val ? head.next : head;
}
}
Vor der rekursiven Methode handelt es sich um einen Prozess zum Schieben des Stapels, nach der rekursiven Methode handelt es sich um einen Prozess zum Öffnen des Stapels
2. Umgekehrte verknüpfte Liste
Umgekehrt verknüpfte Liste https://leetcode.cn/problems/reverse-linked-list/
Titel Beschreibung:
Angesichts des Kopfknotens der einfach verknüpften Liste head
kehren Sie bitte die verknüpfte Liste um und geben Sie die umgekehrte verknüpfte Liste zurück.
Methode 1: Doppelzeiger-Iteration
public ListNode reverseList(ListNode head) {
ListNode pre=null;
ListNode cur=head;
while(cur!=null){
ListNode tmp=cur.next;
cur.next=pre;
pre=cur;
cur=tmp;
}
return pre;
}
Analysieren:
Wir können zwei Zeiger beantragen, der erste Zeiger heißt pre und zeigt zunächst auf null. Der zweite Zeiger „Cur“ zeigt auf den Kopf und durchquert dann kontinuierlich „Cur“. Jedes Mal, wenn es zu cur iteriert, wird das nächste von cur auf pre verwiesen und dann ein Bit auf pre und cur vorgerückt. Nach allen Iterationen (cur wird null) ist pre der letzte Knoten.
Methode 2: Rekursive Analyse:
public ListNode reverseList(ListNode head) {
if(head==null || head.next==null) {
return head;
}
ListNode cur = reverseList(head.next);
head.next.next = head;
head.next = null;
return cur;
}
Analysieren:
3. Der Zwischenknoten der verknüpften Liste
Der mittlere Knoten der verknüpften Liste https://leetcode.cn/problems/middle-of-the-linked-list/
Titel Beschreibung:
Suchen Sie anhand des Kopfknotens der einfach verknüpften Liste head
den mittleren Knoten der verknüpften Liste und geben Sie ihn zurück. Wenn zwei Zwischenknoten vorhanden sind, geben Sie den zweiten Zwischenknoten zurück.
Methode: schnelle und langsame Zeigermethode
public ListNode middleNode(ListNode head) {
if(head==null){
return null;
}
ListNode fast=head;
ListNode slow=head;
while(fast!=null&&fast.next!=null){
fast=fast.next.next;
slow=slow.next;
}
return slow;
}
Analysieren:
Verwenden Sie zwei Zeiger,
slow
umfast
die verknüpfte Liste gemeinsam zu durchlaufen.slow
Machen Sie einen Schritt nach dem anderen,fast
zwei Schritte nach dem anderen. Wenn dannfast
das Ende der verknüpften Liste erreicht ist,slow
muss sie sich in der Mitte befinden.
4. Der letzte k-te Knoten in der verknüpften Liste
Titel Beschreibung:
Geben Sie eine verknüpfte Liste ein und geben Sie den k-ten letzten Knoten in der verknüpften Liste aus.
Methode: schnelle und langsame Zeigermethode
public ListNode FindKthToTail(ListNode head,int k) {
if(head==null||k<=0){
return null;
}
ListNode slow=head;
ListNode fast=head;
while(k-1>0){
fast=fast.next;
if(fast==null){
return null;
}
k--;
}
while(fast!=null&&fast.next!=null){
fast=fast.next;
slow=slow.next;
}
return slow;
}
Analysieren:
Lassen Sie den schnellen Zeiger zuerst zuerst k-1 Schritte gehen, und lassen Sie dann den schnellen und langsamen Zeiger Schritt für Schritt laufen, bis der schnelle Zeiger fast==null&&fast.next==null ist und der langsame Zeiger der K-te Knoten von ist unten.
5. Führen Sie zwei geordnete verknüpfte Listen zusammen
Zwei geordnete verknüpfte Listen zusammenführen https://leetcode.cn/problems/merge-two-sorted-lists/ Titelbeschreibung:
Führt zwei aufsteigende Listen zu einer neuen aufsteigenden Liste zusammen und kehrt zurück. Die neue verknüpfte Liste wird durch Zusammenfügen aller Knoten der beiden angegebenen verknüpften Listen gebildet.
Methode: iterieren
public ListNode mergeTwoLists(ListNode head1, ListNode head2) {
if(head1==null){
return head2;
}
if(head2==null){
return head1;
}
ListNode listNode = new ListNode();
ListNode cur=listNode;
while(head1!=null&&head2!=null){
if(head1.val<head2.val){
cur.next=head1;
head1=head1.next;
}else{
cur.next=head2;
head2=head2.next;
}
cur=cur.next;
}
if(head1==null){
cur.next=head2;
}else{
cur.next=head1;
}
return listNode.next;
}
Analysieren:
Vergleichen Sie die Elemente in head1 und head2. Wer kleiner ist, wird mit cur verbunden. Wenn beispielsweise der Wert von head1 klein ist, verbinden Sie hea1 mit cur und machen Sie dann einen Schritt zurück, um zum neuen head1 zu werden. Cur macht einen Schritt rückwärts, um der neue Cur zu werden, wiederum durch Analogie vergleichen
Das Obige ist mein persönlicher Austausch. Wenn Sie Fragen haben, können Sie diese gerne besprechen! ! !
Ich habe das gesehen, warum hörst du nicht zu und gibst ein kostenloses „Gefällt mir“.