怎么说呢,太久没刷连反转链表都忘了
我本以为,写点注释的话能更好地记起代码是干嘛的,没想到啊没想到,我连注释都看不懂 我以后不写注释辣!
本题我的思路是:首先拆分链表,分为{1~m-1, m~n, n+1~end}三个部分;然后对m~n的部分进行反转;最后合并链表
代码如下:
def reverseBetween(self , head: ListNode, m: int, n: int) -> ListNode:
mNodeFront, mNode, nNodeNext = None, None, None
p = head
# 将链表分为三部分
# 记录第一部分的尾结点,第二部分的头结点以及第三部分的头结点
if m == 1:
mNode = head
i = 1
while p != None:
if i == m - 1:
mNodeFront = p
mNode = p.next
if i == n:
nNodeNext = p.next
p.next = None
p = p.next
i += 1
# 接下来反转并合并链表
betweenHead = self.reverseList(mNode)
betweenTail = self.getTail(betweenHead)
betweenTail.next = nNodeNext
if m == 1: #判断是否表头
head = betweenHead
else:
mNodeFront.next = betweenHead
return head
def reverseList(self, head) -> ListNode: # 反转链表
p = head
head = None
while p != None:
q = p.next
p.next = head
head = p
p = q
return head
def getTail(self, head) -> ListNode: # 寻找链表尾结点
while head != None: # 找二部分尾结点用的
if head.next == None:
return head
head = head.next
return None
说真的,写完一次过我还挺开心的
直到我翻了翻评论寻找最优的代码 我就不该看评论
贴在下面了,真的短小精悍,这就是人类的参差吗?
用我能表述的人话来说就是:反转的部分将倒数第n-1项、倒数第n-2项、……、倒数第1项依次提至最前(n不是题中的n)
看懂之后我直呼牛逼,学艺不精只会牛逼
人的能力是有极限的,我不做人了!