node = ListNode(None)
p = node
while p:
.....
return node.next
快慢指针
判断是否相交
链表反转
160. 相交链表
class Solution(object):
def getIntersectionNode(self, headA, headB):
a, b = headA, headB
while a != b:
a = a.next if a else headB
b = b.next if b else headA
return a
83. 删除排序链表中的重复元素
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
node = ListNode(None)
node.next = head
p = node
while p.next:
if p.val == p.next.val:
p.next = p.next.next
else:
p = p.next
return node.next
876. 链表的中间结点
class Solution:
def middleNode(self, head: ListNode) -> ListNode:
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
return slow
class Solution:
def deleteDuplicates(self, head: ListNode) -> ListNode:
node = ListNode(None)
node.next = head
p = node
while p.next:
if p.val == p.next.val:
p.next = p.next.next
else:
p = p.next
return node.next
206. 反转链表
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
pre = cur = None
nex = head
while nex:
cur = nex
nex = nex.next
cur.next = pre
pre = cur
return pre
21. 合并两个有序链表
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
res = ListNode(None)
node = res
while l1 and l2:
if l1.val < l2.val:
node.next, l1 = l1, l1.next
else:
node.next, l2 = l2, l2.next
node = node.next
if l1:
node.next = l1
else:
node.next = l2
return res.next
234. 回文链表
class Solution:
def isPalindrome(self, head: ListNode) -> bool:
res = []
while head:
res.append(head.val)
head = head.next
return res == res[::-1]
328. 奇偶链表
class Solution:
def oddEvenList(self, head: ListNode) -> ListNode:
if not head:
return
odd = head
even = head.next
temp = even
while even and even.next:
odd.next = odd.next.next
odd = odd.next
even.next = even.next.next
even = even.next
odd.next = temp
return head
2. 两数相加
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
a, b = [], []
while l1:
a.insert(0, l1.val)
l1 = l1.next
while l2:
b.insert(0, l2.val)
l2 = l2.next
c = str(int(''.join([str(i) for i in a])) + int(''.join([str(i) for i in b])))
d = list(map(int, c))
node = ListNode(None)
pre = node
for i in d[::-1]:
node.next = ListNode(i)
node = node.next
return pre.next