真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

LeetCode怎樣反轉(zhuǎn)鏈表

這篇文章主要為大家展示了“LeetCode怎樣反轉(zhuǎn)鏈表”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“LeetCode怎樣反轉(zhuǎn)鏈表”這篇文章吧。

創(chuàng)新互聯(lián)長(zhǎng)期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為甘南企業(yè)提供專業(yè)的做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)甘南網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

題目描述

反轉(zhuǎn)一個(gè)單鏈表。

 

示例:

輸入: 1->2->3->4->5->NULL

輸出: 5->4->3->2->1->NULL

 

解題思路

鏈表一般都是用迭代或是遞歸法來解決,而且一般都是構(gòu)造雙指針、三指針,比如反轉(zhuǎn)鏈表或是DP動(dòng)態(tài)規(guī)劃。

 

雙指針迭代

我們可以申請(qǐng)兩個(gè)指針,第一個(gè)指針叫 pre,最初是指向 null 的。

第二個(gè)指針 cur 指向 head,然后不斷遍歷 cur。

每次迭代到 cur,都將 cur 的 next 指向 pre,然后 pre 和 cur 前進(jìn)一位。

都迭代完了(cur 變成 null 了),pre 就是最后一個(gè)節(jié)點(diǎn)了。

java實(shí)現(xiàn)

class Solution {
 public ListNode reverseList(ListNode head) {
  //申請(qǐng)結(jié)點(diǎn),pre和 cur,pre指向null
  ListNode pre = null;
  ListNode cur = head;
  ListNode tmp = null;
  while(cur!=null) {
   //記錄當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)
   tmp = cur.next;
   //然后將當(dāng)前節(jié)點(diǎn)指向pre
   cur.next = pre;
   //pre和cur節(jié)點(diǎn)都前進(jìn)一位
   pre = cur;
   cur = tmp;
  }
  return pre;
 }
}
 

Python實(shí)現(xiàn)

class Solution(object):
    def reverseList(self, head):
        if not head or not head.next:
            return head
        l = head 
        r = head.next 
        remain = r.next 
        l.next = None
        while r:
            r.next = l 
            l = r 
            r = remain 
            if remain:
                remain = remain.next
        return l
   

遞歸實(shí)現(xiàn):

遞歸的兩個(gè)條件:

  • 終止條件是當(dāng)前節(jié)點(diǎn)或者下一個(gè)節(jié)點(diǎn)==null
  • 在函數(shù)內(nèi)部,改變節(jié)點(diǎn)的指向,也就是 head 的下一個(gè)節(jié)點(diǎn)指向 head 遞歸函數(shù)那句     head.next.next = head很不好理解,其實(shí)就是 head 的下一個(gè)節(jié)點(diǎn)指向head。

遞歸函數(shù)中每次返回的 cur 其實(shí)只最后一個(gè)節(jié)點(diǎn),在遞歸函數(shù)內(nèi)部,改變的是當(dāng)前節(jié)點(diǎn)的指向。

class Solution {
 public ListNode reverseList(ListNode head) {
  //遞歸終止條件是當(dāng)前為空,或者下一個(gè)節(jié)點(diǎn)為空
  if(head==null || head.next==null) {
   return head;
  }
  //這里的cur就是最后一個(gè)節(jié)點(diǎn)
  ListNode cur = reverseList(head.next);
  //如果鏈表是 1->2->3->4->5,那么此時(shí)的cur就是5
  //而head是4,head的下一個(gè)是5,下下一個(gè)是空
  //所以head.next.next 就是5->4
  head.next.next = head;
  //防止鏈表循環(huán),需要將head.next設(shè)置為空
  head.next = null;
  //每層遞歸函數(shù)都返回cur,也就是最后一個(gè)節(jié)點(diǎn)
  return cur;
 }
}
 
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        if not head or head.next == None: return head
        res = self.reverseList(head.next)
        head.next.next = head
        head.next = None
        return res

以上是“LeetCode怎樣反轉(zhuǎn)鏈表”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)站標(biāo)題:LeetCode怎樣反轉(zhuǎn)鏈表
轉(zhuǎn)載源于:http://weahome.cn/article/pjpigg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部