链表24|19|面试题02.07|142
24两两交换链表中的节点
# 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() dummy_head.next = head cur = dummy_head while cur.next and cur.next.next: temp1 = cur.next cur.next = cur.next.next temp2 = cur.next.next cur.next.next = temp1 temp1.next = temp2 cur = cur.next.next return dummy_head.next
19删除链表的倒数第N个节点
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]: dummy_head = ListNode() dummy_head.next = head slow = dummy_head fast = dummy_head for i in range(n): fast = fast.next while fast.next: slow = slow.next fast = fast.next slow.next = slow.next.next return dummy_head.next
面试题02.07链表相交
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: curA = headA curB = headB sizeA = 0 sizeB = 0 while curA: sizeA += 1 curA = curA.next while curB: sizeB += 1 curB = curB.next curA = headA curB = headB if sizeA > sizeB: curA, curB = curB, curA sizeA, sizeB = sizeB, sizeA gap = sizeB - sizeA for i in range(gap): curB = curB.next while curA and curB: if curA == curB: return curA curA = curA.next curB = curB.next return None
142
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]: slow = head fast = head while fast and fast.next: slow = slow.next fast = fast.next.next if slow == fast: index1 = head index2 = fast while index1 != index2: index1 = index1.next index2 = index2.next return index1 return None