注意循环的条件(什么时候停止
注意空指针的问题
注意链表节点next属性改变的顺序(画图,注意改变之后原来的next指针就没了,可以借助temp变量临时保存
更新链表滑动的指针时要按新链表的顺序来
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
dummy_head = ListNode(next=head)
cur = head
pre = dummy_head
while(cur != None):
if cur.next == None:
break
pre.next = cur.next
temp = cur.next.next
cur.next.next = cur
cur.next = temp
pre = pre.next.next
cur = cur.next
return dummy_head.next
增加虚拟头节点来统一操作
class Solution:
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
i = 1
fakehead = ListNode(next=head)
cur = head
fin = fakehead
while(cur.next != None):
cur = cur.next
i += 1
if(i > n):
fin = fin.next
fin.next = fin.next.next
return fakehead.next
注意链表相交可以从长度入手
对齐
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
lenA, lenB = 0, 0
cur = headA
while cur: # 求链表A的长度
cur = cur.next
lenA += 1
cur = headB
while cur: # 求链表B的长度
cur = cur.next
lenB += 1
curA, curB = headA, headB
if (lenA <= lenB):
curA = headB
curB = headA
diff = abs(lenA-lenB)
for i in range(diff):
curA = curA.next
while(curB):
if curA == curB:
return curA
curA = curA.next
curB = curB.next
return None
第一,如何判断有环?通过快慢指针相遇来判断 第二,如何确定入环结点?数学建模一下,还是用快慢指针相遇。 记一下套路