目录
- 24. 两两交换链表中的节点
- 19.删除链表的倒数第N个节点
- 面试题 02.07. 链表相交
- 142.环形链表II
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 = ListNode(next = head)cur = dummywhile cur.next and cur.next.next:temp1 = cur.nexttemp3 = cur.next.next.nextcur.next = temp1.next cur.next.next = temp1temp1.next = temp3cur = temp1return dummy.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 = ListNode(next = head)fast = dummyslow = dummyfor i in range(n):fast = fast.next while fast.next:fast = fast.nextslow = slow.nextslow.next = slow.next.nextreturn dummy.next
面试题 02.07. 链表相交
链接
等比例法
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = Noneclass Solution:def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:A, B = headA, headBwhile A != B:A = A.next if A else headBB = B.next if B else headAreturn B
142.环形链表II
链接
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = Noneclass Solution:def detectCycle(self, head: Optional[ListNode]) -> Optional[ListNode]:fast, slow = head, headwhile fast and fast.next:slow = slow.nextfast = fast.next.nextif slow == fast:slow = headwhile slow != fast:slow = slow.nextfast = fast.nextreturn slowreturn None