2. Reverse Nodes in k-Group

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
You may not alter the values in the nodes, only nodes itself may be changed.
Only constant memory is allowed.
For example,
Given this linked list: 1->2->3->4->5
For k = 2, you should return: 2->1->4->3->5
For k = 3, you should return: 3->2->1->4->5

注意:
1.空指針和只有一個(gè)節(jié)點(diǎn)之類(lèi)的邊界情況。

  1. 更新鏈表之后,沒(méi)有將鏈表尾部置空,造成它指向其他的節(jié)點(diǎn),構(gòu)成環(huán),或者想拆下鏈表的一部分時(shí)沒(méi)有把那部分的尾部置空,構(gòu)成環(huán)。
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None
```
class Solution(object):
    """
    :type head: ListNode
    :type k: int
    :rtype: ListNode
    """
    def reverse(self,head):
        newHead = head
        head = head.next
        while head != None:
            t = head
            head = head.next
            t.next = newHead
            newHead = t
        return newHead
    def reverseKGroup(self, head, k):
        if head == None or head.next == None:
            return head
        indexNode = head.next
        newHead = head
        newTailer = head
        newTailer.next = None
        for i in range(k-1):
            if indexNode == None:
                self.reverse(newHead)
                t = newHead
                newHead = newTailer
                newTailer = t
                break
            t = indexNode
            indexNode = indexNode.next
            t.next = newHead
            newHead = t
        head = newHead
        listEndNode = newTailer
        while indexNode != None:
            # get the first one
            newHead = indexNode
            newTailer = indexNode
            indexNode = indexNode.next
            newTailer.next = None

            # get the k-1 node
            for i in range(k-1):
                if indexNode == None:
                    self.reverse(newHead)
                    t = newHead
                    newHead = newTailer
                    newTailer = t
                    break
                t = indexNode
                indexNode = indexNode.next
                t.next = newHead
                newHead = t
            listEndNode.next = newHead
            #reset the end value
            listEndNode = newTailer
         # important next must set null , or the next may pointor othor palce
        listEndNode.next = None
        return head

看我改進(jìn)版,減少初始判斷。。。

class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution(object):
    """
    :type head: ListNode
    :type k: int
    :rtype: ListNode
    """
    def reverse(self,head):
        newHead = head
        head = head.next
        while head != None:
            t = head
            head = head.next
            t.next = newHead
            newHead = t
        return newHead

    def reverseKGroup(self, head, k):
        if head == None or head.next == None:
            return head
        indexNode = head
        head = ListNode(0)
        listEndNode = head
        while indexNode != None:
            # get the first one
            newHead = indexNode
            newTailer = indexNode
            indexNode = indexNode.next
            newTailer.next = None

            # get the k-1 node
            for i in range(k-1):
                if indexNode == None:
                    self.reverse(newHead)
                    t = newHead
                    newHead = newTailer
                    newTailer = t
                    break
                t = indexNode
                indexNode = indexNode.next
                t.next = newHead
                newHead = t
            listEndNode.next = newHead
            #reset the end value
            listEndNode = newTailer
         # important next must set null , or the next may pointor othor palce
        listEndNode.next = None
        return head.next
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,916評(píng)論 0 33
  • Description: Given a linked list, reverse the nodes of a ...
    黑山老水閱讀 361評(píng)論 0 0
  • 前些天參加了一個(gè)會(huì)議,會(huì)上有多位領(lǐng)導(dǎo)進(jìn)行了工作安排和強(qiáng)調(diào)。并要求參會(huì)干部將會(huì)議精神傳達(dá)至各村,并指導(dǎo)包聯(lián)村按要求開(kāi)...
    GoodGavin閱讀 168評(píng)論 0 0
  • 翻譯自The way to go 10.4 在go語(yǔ)言的一個(gè)struct中,除了變量名和類(lèi)型之外,還可以選擇性的增...
    祖祖閱讀 8,468評(píng)論 1 4

友情鏈接更多精彩內(nèi)容