星辰大海的路上 2020-04-22
其实就是普通的插排,没想到中间还是因为尾节点的next指针没处理导致死循环,题目直接看链接,这里只是记录一下思路和代码。
解题思路:
需要注意的点:
1、增加一个极小值的头节点方便后面代码的撰写。
2、记录尾节点进行判断,减少总体循环的次数。
3、记得取出要判断的点时,尾节点的next要指向next.next节点,不然就无限循环了。
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def insertionSortList(self, head: ListNode) -> ListNode: if head==None: return head #在开头建一个无穷小节点,保证所有节点都大于该节点,方便后面代码撰写 res=ListNode(-float(‘inf‘)) res.next=head now=head cur=head.next while cur: #如果尾节点小于要判断的节点,则直接略过 if cur.val>=now.val: cur,now=cur.next,cur else: pre=res #将尾节点的next指向下一个要判断的节点 now.next=cur.next #循环到左小右大的位置 while pre.next.val<cur.val: pre=pre.next #将目标节点插入特定位置 tmp=pre.next pre.next=cur cur.next=tmp #重新指向下一个要判断的节点,方便下一轮循环 cur=now.next return res.next