classSolution: defgetIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: a,b=headA,headB while a!=b: a=a.nextif a else headB b=b.nextif b else headA return a
2.链表反转
题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 思路:双指针,改变next
1 2 3 4 5 6 7 8 9
classsolution: defreverseList(self,head:ListNode)->ListNode: a,b=head,None while a: t=a.next a.next=b b=a a=t return b
3.回文链表
题目:给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 思路:堆栈,将链表压入堆栈,然后依次弹出,判断是否相等
1 2 3 4 5 6 7 8 9 10 11 12 13 14
classSolution: defisPalindrome(self,head:ListNode)->bool: stack=[] a=head while a: stack.append(a) a=a.next b=head while stack: c=stack.pop() if c.val!=b.val: returnFalse b=b.next returnTrue
4.环形链表
题目:给你一个链表的头节点 head ,判断链表中是否有环。 思路:哈希表存储,判断有无重复结点
1 2 3 4 5 6 7 8 9
classSolution: defhasCycle(self,head:ListNode)->bool a=set() #集合 set 本质就是去掉 value 的哈希表 while head: if head in a: returnTrue a.add(head) head=head.next returnFalse
classSolution: defremove(self, s: str) -> str: stack=[] for c in s: stack.append(c) iflen(stack)>=3: if stack[1]==stack[3] and stack[1]!=stack[2]: stack.pop() stack.pop() stack.pop() return"".join(stack)