日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode19删除链表的倒数第N个节点20有效的括号

發(fā)布時間:2025/3/20 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode19删除链表的倒数第N个节点20有效的括号 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

維護不易,還請點贊支持,微信搜索bigsai 回復進群一起打卡。

19刪除鏈表的倒數(shù)第N個節(jié)點

給定一個鏈表,刪除鏈表的倒數(shù)第 n 個節(jié)點,并且返回鏈表的頭結(jié)點。

示例:

給定一個鏈表: 1->2->3->4->5, 和 n = 2.
當刪除了倒數(shù)第二個節(jié)點后,鏈表變?yōu)?1->2->3->5.

說明:

給定的 n 保證是有效的。

進階:

你能嘗試使用一趟掃描實現(xiàn)嗎?

分析:
可以掃描兩次,第一次獲取總長度,知道倒數(shù)第N是正數(shù)第幾個,第二次掃描真正的找到節(jié)點刪除。

如何掃描一次呢?

可以使用數(shù)組(集合),將所有節(jié)點地址存入ArrayList中,根據(jù)n找到正數(shù)的編號,直接編號前一個next指向編號后一個節(jié)點,最終返回頭即可,當然要考慮特殊情況比如刪除頭之類。實現(xiàn)代碼:

public ListNode removeNthFromEnd2(ListNode head, int n) { List<ListNode>list=new ArrayList<ListNode>();ListNode team=head;while (team!=null) {list.add(team);team=team.next;}list.add(null);if(list.size()==n)return head.next;if(list.size()<1)return null;int index=list.size()-1-n;list.get(index-1).next=list.get(index+1);return head; }

還可以怎么考慮?

用兩個指針,一個先走N步,然后兩個同時向下尋找。一直到右側(cè)的到最盡頭即可找到待刪除節(jié)點。

這樣刪除并不方便,在具體操作上,要找到待刪除的前一個節(jié)點,用這個節(jié)點刪除他的后面節(jié)點。而如果待刪除的是頭節(jié)點可能還需要特殊討論,為了避免這種情況,我們可以使用一個頭節(jié)點放在最前側(cè),這樣就可以把鏈表中每一個節(jié)點都當作普通節(jié)點來處理。

具體代碼為:

public ListNode removeNthFromEnd(ListNode head, int n) { ListNode value=new ListNode(0);value.next=head;head=value;ListNode team=value;for(int i=0;i<n;i++){team=team.next;}while (team.next!=null) {team=team.next;head=head.next;}if(head.next!=null)head.next=head.next.next;return value.next; }

20 有效的括號

給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。

有效字符串需滿足:

左括號必須用相同類型的右括號閉合。
左括號必須以正確的順序閉合。
注意空字符串可被認為是有效字符串。

示例 1:

輸入: "()"
輸出: true

示例 2:

輸入: "()[]{}"
輸出: true

示例 3:

輸入: "(]"
輸出: false

示例 4:

輸入: "([)]"
輸出: false

示例 5:

輸入: "{[]}"
輸出: true

分析:
括號類的問題是經(jīng)典棧類問題,肯定要想到用棧處理。判斷一個字符串滿不滿足一個有效的字符串,就要看它是不是都能組成對。

  • 從單個對來說,((,))都是不滿足的,只有()才可滿足,即一左一右。
  • 從多個對來說{[(字符串還可接受任意無限(,[,{的括號。但是只能接收)的向左的括號。

從上面可以看作一種相消除的思想。例如(({[()()]}))字符串遍歷時候可以這樣處理:

  • (({[(下一個)消掉成(({[
  • (({[(下一個)消掉成(({[
  • (({[下一個]消掉成(({
  • (({下一個}消掉成((
  • ((下一個)消掉成(
  • (下一個)消掉成`` 這樣就滿足題意

所以這個過程利用棧判斷當前是加入棧還是消除頂部,到最后如果棧為空說明滿足,否則不滿足,當然具體括號要對應,具體實現(xiàn)代碼為:

public boolean isValid(String s) {Stack<Character>stack=new Stack<Character>();for(int i=0;i<s.length();i++){ char te=s.charAt(i);if(te==']'){if(!stack.isEmpty()&&stack.pop()=='[')continue;else {return false;}}else if(te=='}'){if(!stack.isEmpty()&&stack.pop()=='{')continue;else {return false;}}else if(te==')'){if(!stack.isEmpty()&&stack.pop()=='(')continue;else {return false;}}elsestack.push(te);}return stack.isEmpty(); }


用自帶的棧并不是很快,所以我們使用數(shù)組模擬棧的實現(xiàn),這樣速度就快了一點:

public boolean isValid(String s) {char a[]=new char[s.length()];int index=-1;for(int i=0;i<s.length();i++){ char te=s.charAt(i);if(te==']'){if(index>=0&&a[index]=='[')index--;else {return false;}}else if(te=='}'){if(index>=0&&a[index]=='{')index--;else {return false;}}else if(te==')'){if(index>=0&&a[index]=='(')index--;else {return false;}}elsea[++index]=te;}return index==-1; }

結(jié)語

原創(chuàng)不易,bigsai請你幫兩件事幫忙一下:

  • star支持一下, 您的肯定是我在平臺創(chuàng)作的源源動力。

  • 微信搜索「bigsai」,關注我的公眾號,不僅免費送你電子書,我還會第一時間在公眾號分享知識技術。加我還可拉你進力扣打卡群一起打卡LeetCode。

  • 記得關注、咱們下次再見!

    總結(jié)

    以上是生活随笔為你收集整理的LeetCode19删除链表的倒数第N个节点20有效的括号的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。