成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[Leetcode] Reverse Linked List 反轉(zhuǎn)鏈表

Eminjannn / 2729人閱讀

摘要:先跳過(guò)前個(gè)節(jié)點(diǎn),然后初始化好這五個(gè)指針后,用中的方法反轉(zhuǎn)鏈表。完成了第個(gè)節(jié)點(diǎn)的反轉(zhuǎn)后,將子鏈反轉(zhuǎn)前的頭節(jié)點(diǎn)的設(shè)為子鏈反轉(zhuǎn)過(guò)程中的下一個(gè)節(jié)點(diǎn),將子鏈反轉(zhuǎn)前頭節(jié)點(diǎn)前面一個(gè)節(jié)點(diǎn)的設(shè)為子鏈反轉(zhuǎn)過(guò)程中的當(dāng)前節(jié)點(diǎn)。

Reverse Linked List I

Reverse a singly linked list.

click to show more hints.

Hint: A linked list can be reversed either iteratively or recursively. Could you implement both?

遞歸法 復(fù)雜度

時(shí)間 O(N) 空間 O(N) 遞歸??臻g

思路

基本遞歸

代碼
public class Solution {
    
    ListNode newHead;
    
    public ListNode reverseList(ListNode head) {
        reverse(head);
        return newHead;
    }
    
    private ListNode reverse(ListNode n){
        if( n == null || n.next == null){
            newHead = n;
        } else {
            ListNode prev = reverseList(n.next);
            prev.next = n;
        }
        return n;
    }
}
迭代法 復(fù)雜度

時(shí)間 O(N) 空間 O(1)

思路

基本迭代

代碼

java

public class Solution {
    public ListNode reverseList(ListNode head) {
        if(head == null || head.next == null) return head;
        ListNode p1 = head;
        ListNode p2 = p1.next;
        while(p2 != null){
            ListNode tmp = p2.next;
            p2.next = p1;
            p1 = p2;
            p2 = tmp;
        }
        head.next = null;
        return p1;
    }
}

python

class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        p1 = None
        p2 = head
        while(p2 is not None):
            tmp = p2.next
            p2.next = p1
            p1 = p2
            p2 = tmp
        return p1
Reverse Linked List II

Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example: Given 1->2->3->4->5->NULL, m = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note: Given m, n satisfy the following condition: 1 ≤ m ≤ n ≤ length of list.

迭代法 復(fù)雜度

時(shí)間 O(N) 空間 O(1)

思路

技巧在于記錄下這么幾個(gè)變量:dummyHead、子鏈反轉(zhuǎn)前的頭節(jié)點(diǎn),子鏈反轉(zhuǎn)前頭節(jié)點(diǎn)前面一個(gè)節(jié)點(diǎn),子鏈反轉(zhuǎn)過(guò)程中的當(dāng)前節(jié)點(diǎn),子鏈反轉(zhuǎn)過(guò)程中的下一個(gè)節(jié)點(diǎn),這五個(gè)指針。先跳過(guò)前m個(gè)節(jié)點(diǎn),然后初始化好這五個(gè)指針后,用I中的方法反轉(zhuǎn)鏈表。完成了第n個(gè)節(jié)點(diǎn)的反轉(zhuǎn)后,將子鏈反轉(zhuǎn)前的頭節(jié)點(diǎn)的next設(shè)為子鏈反轉(zhuǎn)過(guò)程中的下一個(gè)節(jié)點(diǎn),將子鏈反轉(zhuǎn)前頭節(jié)點(diǎn)前面一個(gè)節(jié)點(diǎn)的next設(shè)為子鏈反轉(zhuǎn)過(guò)程中的當(dāng)前節(jié)點(diǎn)。由于設(shè)置了dummyhead,我們所有的反轉(zhuǎn)操作都是不包含頭節(jié)點(diǎn)的,所以直接返回dummyhead的next就行了。

注意

跳過(guò)前m個(gè)節(jié)點(diǎn)的for循環(huán)要從1開始,因?yàn)槲覀円WChead是第m-1個(gè)元素,如果m=1則不動(dòng)。

代碼
public class Solution {
    public ListNode reverseBetween(ListNode head, int m, int n) {
        if(head == null || head.next == null) return head;
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        head = dummy;
        for(int i = 1 ; i < m; i++){
            head = head.next;
        }
        ListNode headOfSubList = head.next;
        ListNode nodeBeforeHead = head;
        ListNode nextNode = head.next.next;
        ListNode currNode = head.next;
        for(int i = m; i < n ; i++){
            ListNode tmp = nextNode.next;
            nextNode.next = currNode;
            currNode = nextNode;
            nextNode = tmp;
        }
        headOfSubList.next = nextNode;
        nodeBeforeHead.next = currNode;
        return dummy.next;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64500.html

相關(guān)文章

  • LeetCode 206:反轉(zhuǎn)鏈表 Reverse Linked List

    摘要:反轉(zhuǎn)一個(gè)單鏈表。示例輸入輸出進(jìn)階你可以迭代或遞歸地反轉(zhuǎn)鏈表。你能否用兩種方法解決這道題解題思路每次遍歷到最后一位取節(jié)點(diǎn)這種方法就算了時(shí)間復(fù)雜度太高。從鏈表末尾向頭部逐個(gè)分離節(jié)點(diǎn),并將節(jié)點(diǎn)添加到新鏈表的末尾。與迭代法原理相似。 反轉(zhuǎn)一個(gè)單鏈表。 Reverse a singly linked list. 示例: 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2...

    Gilbertat 評(píng)論0 收藏0
  • LeetCode 206:反轉(zhuǎn)鏈表 Reverse Linked List

    摘要:反轉(zhuǎn)一個(gè)單鏈表。示例輸入輸出進(jìn)階你可以迭代或遞歸地反轉(zhuǎn)鏈表。你能否用兩種方法解決這道題解題思路每次遍歷到最后一位取節(jié)點(diǎn)這種方法就算了時(shí)間復(fù)雜度太高。從鏈表末尾向頭部逐個(gè)分離節(jié)點(diǎn),并將節(jié)點(diǎn)添加到新鏈表的末尾。與迭代法原理相似。 反轉(zhuǎn)一個(gè)單鏈表。 Reverse a singly linked list. 示例: 輸入: 1->2->3->4->5->NULL 輸出: 5->4->3->2...

    heartFollower 評(píng)論0 收藏0
  • LeetCode 之 JavaScript 解答第206題 —— 反轉(zhuǎn)鏈表Reverse Link

    摘要:算法思路兩種方法一般反轉(zhuǎn)遞歸法一般解決定義三個(gè)指針,分別為,存儲(chǔ)當(dāng)前結(jié)點(diǎn),指向反轉(zhuǎn)好的結(jié)點(diǎn)的頭結(jié)點(diǎn),存儲(chǔ)下一結(jié)點(diǎn)信息。遞歸法重點(diǎn)分析先確定終止條件當(dāng)下一結(jié)點(diǎn)為時(shí),返回當(dāng)前節(jié)點(diǎn)判斷當(dāng)前的鏈表是否為遞歸找到尾結(jié)點(diǎn),將其存儲(chǔ)為頭結(jié)點(diǎn)。 Time:2019/4/23Title: Reverse Linked ListDifficulty: EasyAuthor: 小鹿 題目:Reverse...

    zhangfaliang 評(píng)論0 收藏0
  • [Leetcode] Reverse Linked List 鏈表反轉(zhuǎn)(遞歸與非遞歸)

    摘要:代碼描述調(diào)轉(zhuǎn)指針解法非遞歸用三個(gè)指針,緊緊相鄰,不斷前進(jìn),每次將指向,將指向指向。描述遞歸解法測(cè)試結(jié)果 Reverse a singly linked list. 代碼ReverseLinkedList.java package list; public class ReverseLinkedList { /** * 描述 Reverse a singly...

    RyanHoo 評(píng)論0 收藏0
  • [Leetcode] Swap Nodes in Pairs Reverse Nodes in k-

    摘要:三指針法復(fù)雜度時(shí)間空間思路基本的操作鏈表,見注釋。注意使用頭節(jié)點(diǎn)方便操作頭節(jié)點(diǎn)。翻轉(zhuǎn)后,開頭節(jié)點(diǎn)就成了最后一個(gè)節(jié)點(diǎn)。 Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2->3->4, you should ...

    TZLLOG 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<