Leetcode:链表题目整理
1.尽量处理当前节点的下一个节点而不是当前节点。
2.建立虚拟节点作为头节点,解决链表的边界问题。
1.翻转一个链表(题号:206)
题目:
解题代码:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
pre=None
curr=head
while curr:
temp=curr.next
curr.next=pre
pre=curr#存储当前节点,以作为下一个节点的前节点
curr=temp
return pre
思路或技巧:1.将指针的下一个节点存储在临时变量。
2.pre初始化为None
2.合并两个链表(题号:21)
题目:
题解:
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
L=d=ListNode(0)
while l1 and l2:
if l1.val<=l2.val:
L.next=l1
l1=l1.next
else:
L.next=l2
l2=l2.next
L=L.next
L.next=l1 or l2
return d.next
思路:1.创建空节点,作为一个新的链表开端。
2.迭代遍历两个链表并考虑极端情况
3.删除链表重复元素(题号:83)
题目:
题解:
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
curr=head
while curr and curr.next:
if curr.val==curr.next.val:
curr.next=curr.next.next
curr=curr.next
return head
4.相交链表(题号:160)
题解:
class Solution:
def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
curr1=l1
curr2=l2
while curr1!=urr2:
curr1=curr1.next if curr1 else l2
curr2=curr2.next if curr2 else l1
return curr1
思路:双指针不断循环,找到重合的点并返回