在师兄的建议下终于开始刷力扣题库了,对于我这样的小白来说果然不简单。趁此机会,利用博客记录刷题过程心得,过段时间回头来看一定有别样感触。
链表知识
210604&210605,连续两天的简单题都是链表相关。虽然是简单题,我却并未能重拳出击,还是知识理解薄弱。
210604 160 相交链表
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。
210605 203 移除链表元素
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点 。
力扣对于链表形式定义
#Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
链表的定义
链表是以节点(node)存储的链式存储结构,一个node包含一个data域也即力扣中的node.val(存放数据),和一个next域即node.next(存放下一个node的指针),链表的各个节点不一定是连续的,它可以分为带头结点和不带头结点。头结点仅包含next域。
参考链接:看了这篇文章,就别再问我链表了!
看完一把子理解链表
个人题解
第160题
放上学习后个人关于第160题的解答:
class Solution:
def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:
a,b = headA,headB
while a != b:
a = a.next if a else headB
b = b.next if b else headA
return a
第203题
关于第203题的迭代解法,关键在于添加 哑结点 dummyHead:
class Solution:
def removeElements(self, head: ListNode, val: int) -> ListNode:
# Definition for singly-linked list.
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
dummyHead = ListNode(0)
dummyHead.next = head
a = dummyHead
while a.next != None:
if a.next.val == val:
a.next = a.next.next
else:
a = a.next
return dummyHead.next