鏈表之第二回

在這里插入圖片描述

歡迎來到我的:世界

該文章收入欄目:鏈表

希望作者的文章對你有所幫助,有不足的地方還請指正,大家一起學習交流 !


目錄

  • 前言
    • 第一題:反轉一個鏈表
    • 第二題:鏈表內指定區間反轉
    • 第三題:判斷一個鏈表是否為回文結構
  • 總結

前言


對于我來說這個博客是一個學習的地方,就像我的上篇文章一樣,有老鐵們的支持,陪伴;我很滿足,這個欄目我會繼續堅持下去,108回,就像我的108難一樣,只要撐過磨難,一定能取到真經

--------------------------對過程全力以赴,對結果淡然處之


第一題:反轉一個鏈表


地址:oj地址


在這里插入圖片描述
解題思路:

思路:讓鏈表翻轉過來,可以先創造一個新的鏈表頭指針指向空,然后原來的鏈表一個一個頭插到新的指針,到時候在返回新創造的鏈表起始位置。按照這個思路;

我們需要創造一個新指針變量指向空:

在這里插入圖片描述

然后接下來就是將原鏈表頭插入newnode;

這里需要注意一下如果按照頭插入newnode,如果指針pHead將結點插入來的話,那pHead原指向的下一個結點就丟失了,所以這里需要創造一個新的指針 next 存放pHead所指的下一個結點,這樣才能找回去;
在這里插入圖片描述

后面步驟依次將后續頭插入;這里有一步也需要注意,記得讓cur找回到next的結點,然后使next再指向cur下一個結點;

在這里插入圖片描述

直到pHead為空結束,最后返回newnode;

在這里插入圖片描述

代碼:

struct ListNode* ReverseList(struct ListNode* head ) {// write code herestruct ListNode* newnode = NULL;struct ListNode* cur = head;//頭插while (cur) {//為了cur能夠找回下一個結點struct ListNode* next = cur->next;//頭插cur->next = newnode;newnode = cur;//cur指針找回到下一個結點cur = next;}return newnode;
}

第二題:鏈表內指定區間反轉


地址:oj地址


在這里插入圖片描述

加強版的反轉鏈表;

思路:
先利用cur指針指向該鏈表 head 的位置,依次往下找,直到遇到要反轉區間的起始位置,ret指針記錄住該位置 (后面鏈接起來的要用到);在讓cur往下走,這里應該注意要用prve指針判斷在原來鏈表是否有結點,是否有節點關系到后面鏈接時的方式(是head,還是prve->next)這點很重要;然后從cur現在位置開始進行頭插(為了反轉給區間鏈表)到一個新鏈表newnode,直到走到區間的末尾都頭插入后(包括了末尾這個結點);之后就是鏈接的步驟,需要將head和newnode鏈接起來所以這里用到了prve進行判斷;
具體的更詳細在下面細講:

在這里我想著重想解釋一下為什么要設置prve:

在這里插入圖片描述

這里來舉兩個測試用例

第一個:這種相當于第二種情況:

在這里插入圖片描述

創造cur指針指向的是head,prve先是指向空,開始找區間起始位置,根據m值(m為2,則應該找第二個結點),每找過一個節點,將cur給到prve(這是為了判斷區別出是不是從頭就開始頭插,在后面鏈接時會用來判斷其鏈接的方式,在上面有詳細解釋),直到找到區間起始(如果m=1,則直接從第一個進行頭插,這個時候的prve仍指向空),在這個位置設置ret,下面進行依次頭插入;

在這里插入圖片描述

直到區間所有頭插完:

在這里插入圖片描述
最后進行鏈接起來,讓prve->next 指向newnode ,ret->next指向cur,最后返回head;
在這里插入圖片描述

還有一個測試用例:

在這里插入圖片描述

這就相當于的是情況1:
全部進行了反轉:

在這里插入圖片描述

全部頭插完后,將head指向newnode,

在這里插入圖片描述

代碼實現:

#include <math.h>
struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {// write code hereif (head == NULL || head->next == NULL || m == n)return head;struct ListNode* cur = head;struct ListNode* newnode = NULL, * tail = NULL;newnode = (struct ListNode*)malloc(sizeof(struct ListNode));newnode->next = tail = NULL;//找到m的最后一個int count=m;struct ListNode*prev=NULL;while(count-->1){prev=cur;cur=cur->next;}struct ListNode*ret=cur;//進行頭插反轉int len=n-m+1;while(len--){struct ListNode*next=cur->next;cur->next=newnode->next;newnode->next=cur;cur=next;}//鏈接if(prev==NULL){head=newnode->next;ret->next=cur;}else {prev->next=newnode->next;ret->next=cur;}
return head;
}

第三題:判斷一個鏈表是否為回文結構


地址:oj地址


在這里插入圖片描述

  • 首先我們要知道什么是回文結構:

偶數回文:1 2 2 1
奇數回文:1 2 3 2 1

解題思路:

思路找到中間的結點,然后讓中間結點后的所有節點反轉,然后,返回的這個中間節點 rever 與該鏈表的第一個結點進行依次比較值,相等就完后走,直到指向中間的這個節點 rever 指向空;

這里會用到返回中間結點的這個函數;和反轉一串鏈表函數(就是本篇文章的第一題);這兩個我們之前已經寫過了:老鐵們可以去看看:返回中間結點;

在這里插入圖片描述

代碼:

struct ListNode* middleNode(struct ListNode* head) {// write code here//返回中間結點的地址//設置快慢指針struct ListNode* sur = head, * dst = head;//當dst指針為空或dst指向的next為空就停下while (dst && dst->next) {sur = sur->next;dst = dst->next->next;}return sur;}//反轉一串鏈表并返回該鏈表的頭地址struct ListNode* ReverseList(struct ListNode* head ) {// write code herestruct ListNode* newnode=NULL;struct ListNode* cur = head;while (cur) {struct ListNode* next = cur->next;//頭插cur->next = newnode;newnode = cur;cur = next;}return newnode;}//實現判斷是否為回文結構
bool isPail(struct ListNode* head ) {// write code herestruct ListNode* mid = middleNode(head);struct ListNode* rever = ReverseList(mid);while (rever) {if (head->val != rever->val) {return false;}rever = rever->next;head = head->next;}return true;
}

總結


對每到題,可能還是可以優化的,如果還有更好的方法的老鐵,可以在評論區里面一起進行討論哦,在后面隨著小孩的知識儲備越多,小孩肯定還會加以優化優化!!


到了最后:感謝支持

我還想告訴你的是:
------------對過程全力以赴,對結果淡然處之
也是對我自己講的

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42014.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42014.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42014.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

opencv+ffmpeg+QOpenGLWidget開發的音視頻播放器demo

前言 本篇文檔的demo包含了 1.使用OpenCV對圖像進行處理&#xff0c;對圖像進行置灰&#xff0c;旋轉&#xff0c;摳圖&#xff0c;高斯模糊&#xff0c;中值濾波&#xff0c;部分區域清除置黑&#xff0c;背景移除&#xff0c;邊緣檢測等操作&#xff1b;2.單純使用opencv播放…

一個案例:Vue2組件化開發組件從入門到入土

1. 環境搭建 1.1. 創建項目 npm install -g vue/clivue create vue_study_todolist1.2. 清空項目代碼 清楚HelloWorld.Vue代碼中的內容。 1.3. 啟動空項目 1.4 項目目標 項目組件實現以下效果 2. 組件拆分代碼 Vue是一個基于組件的框架&#xff0c;允許您將界面拆分成小的…

open cv學習 (五) 圖像的閾值處理

圖像的閾值處理 demo1 # 二值化處理黑白漸變圖 import cv2 img cv2.imread("./img.png", 0) # 二值化處理 t1, dst cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) cv2.imshow("img", img) cv2.imshow("dst", dst) cv2.waitKey() cv2.des…

Golang使用MinIO

最近在使用Golang做了一個網盤項目&#xff08;學習&#xff09;&#xff0c;文件存儲一直保存在本地&#xff08;各廠商提供的oss貴&#xff09;&#xff0c;所以就在思考怎么來處理這些文件&#xff0c;類似的方案很對hdfs、fastdfs&#xff0c;但這其中MinIO是最近幾年比較火…

生信豆芽菜-差異基因富集分析的圈圖

網址&#xff1a;http://www.sxdyc.com/visualsEnrichCirplot 1、數據準備 準備一個基因集的文件 2、選擇富集分析的數據庫&#xff0c;同時輸入展示top幾的條目&#xff0c;選擇顏色&#xff0c;如果是GO的話選擇三個顏色&#xff0c;如果是KEGG選擇一個&#xff0c;如果是G…

神經網絡論文研讀-多模態方向-綜述研讀(上)

翻譯以機翻為主 原文目錄 前言 圖1&#xff1a;LMU印章&#xff08;左&#xff09;風格轉移到梵高的向日葵繪畫&#xff08;中&#xff09;并與提示混合 - 梵高&#xff0c;向日葵 -通過CLIPVGAN&#xff08;右&#xff09;。在過去的幾年中&#xff0c;自然語言處理&#xff…

微信小程序實現拖拽的小球

目錄 前言 js 獲取微信小程序中獲取系統信息 觸摸移動事件的處理函數 觸摸結束事件的處理函數 用于監聽頁面滾動事件 全局參數 html CSS 前言 小程序開發提供了豐富的API和事件處理函數&#xff0c;使得開發者可以方便地實現各種交互功能。其中&#xff0c;拖拽功能…

無涯教程-Perl - tell函數

描述 此函數返回指定FILEHANDLE中讀取指針的當前位置(以字節為單位)。如果省略FILEHANDLE,則它將返回上次訪問的文件中的位置。 語法 以下是此函數的簡單語法- tell FILEHANDLEtell返回值 此函數以字節為單位返回當前文件位置。 例 以下是顯示其基本用法的示例代碼,要檢…

leetcode473. 火柴拼正方形(回溯算法-java)

火柴拼正方形 leetcode473 火柴拼正方形題目描述回溯算法 上期經典算法 leetcode473 火柴拼正方形 難度 - 中等 原題鏈接 - leetcode473 火柴拼正方形 題目描述 你將得到一個整數數組 matchsticks &#xff0c;其中 matchsticks[i] 是第 i 個火柴棒的長度。你要用 所有的火柴棍…

BC119 小樂樂與字符串

描述 在慶祝祖國母親70華誕之際&#xff0c;老師給小樂樂出了一個問題。大家都知道China的英文縮寫是CHN&#xff0c;那么給你一個字符串s&#xff0c;你需要做的是統計s中子序列“CHN”的個數。子序列的定義&#xff1a;存在任意下標a < b < c&#xff0c;那么“s[a]s[b…

微服務—Eureka注冊中心

eureka相當于是一個公司的管理人事HR,各部門之間如果有合作時&#xff0c;由HR進行人員的分配以及調度&#xff0c;具體選哪個人&#xff0c;全憑HR的心情&#xff0c;如果你這個部門存在沒有意義&#xff0c;直接把你這個部門撤銷&#xff0c;全體人員裁掉&#xff0c;所以不想…

計算機網絡筆記

TCP有連接可靠服務 TCP特點&#xff1a; 1.TCP是面向連接的傳輸層協議&#xff1b; 2.每條TCP連接只能有兩個端點&#xff0c;每條TCP連接是一對一的&#xff1b; 3.TCP提供可靠交付&#xff0c;保證傳送數據無差錯&#xff0c;不丟失&#xff0c;不重復且有序&#xff1b; 4.…

Android Studio瀑布流實現

效果&#xff1a; ImageDetail class package com.example.waterfallflow; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.ImageView;public class ImageDetail extends Activity{Overrideprotected void …

DNNGP、DeepGS 和 DLGWAS模型構成對比

一、DNNGP DNNGP 是基于深度卷積神經網絡&#xff0c;這個結構包括一個輸入層&#xff0c;三個卷積層&#xff0c;一個批標準化層&#xff0c;兩個dropout層&#xff0c;一個平坦化層&#xff0c;一個 dense層。 dropout層&#xff1a;在神經網絡中,dropout層是一個非常有效的正…

信息與通信工程面試準備——數學知識|正態分布|中心極限定理

目錄 正態分布 正態分布的參數 正態分布的第一個參數是均值 正態分布的第二個參數是標準差SD 所有正態分布的共同特征 標準正態分布&#xff1a;正態分布的特例 中心極限定理 理解定義 示例# 1 示例# 2 知道樣本均值總是正態分布的實際含義是什么&#xff1f; 正態分…

Scala 如何調試隱式轉換--隱式轉換代碼的顯示展示

方法1 在需要隱式轉換的地方&#xff0c;把需要的參數顯示的寫出。 略方法2&#xff0c;查看編譯代碼 在terminal中 利用 scalac -Xprint:typer xxx.scala方法打印添加了隱式值的代碼示例。 對于復雜的工程來說&#xff0c;直接跑到terminal執行 scalac -Xprint:typer xxx.…

JVM——類文件結構

文章目錄 一 概述二 Class 文件結構總結2.1 魔數2.2 Class 文件版本2.3 常量池2.4 訪問標志2.5 當前類索引,父類索引與接口索引集合2.6 字段表集合2.7 方法表集合2.8 屬性表集合 一 概述 在 Java 中&#xff0c;JVM 可以理解的代碼就叫做字節碼&#xff08;即擴展名為 .class …

winform 封裝unity web player 用戶控件

環境&#xff1a; VS2015Unity 5.3.6f1 (64-bit) 目的&#xff1a; Unity官方提供的UnityWebPlayer控件在嵌入Winform時要求讀取的.unity3d文件路徑&#xff08;Src&#xff09;必須是絕對路徑&#xff0c;如果移動代碼到另一臺電腦&#xff0c;需要重新修改src。于是考慮使…

elementUI 的上傳組件<el-upload>,自定義上傳按鈕樣式

方法一&#xff1a; 原理&#xff1a;調用<el-upload>組件的方法喚起選擇文件事件 效果&#xff1a; 頁面代碼&#xff1a; 1、選擇圖片按鈕 <div class"flex_row_spacebetween btn" click"chooseImg"><span class"el-icon-plus ic…

matlab機器人工具箱基礎使用

資料&#xff1a;https://blog.csdn.net/huangjunsheng123/article/details/110630665 用vscode直接看工具箱api代碼比較方便&#xff0c;代碼說明很多 一、模型設置 1、基礎效果 %采用機器人工具箱進行正逆運動學驗證 a[0,-0.3,-0.3,0,0,0];%DH參數 d[0.05,0,0,0.06,0.05,…