Python实现常见的链表问题

目录

1.环形列表

2.  合并两个有序链表

3. 相交链表

4. 回文链表

5. 反转链表

6. 删除链表的节点

7. 链表中倒数第k个节点


这篇文章是总结一些简单的链表题,使用的方法是只写了其中的一种,方法不唯一。

1.环形列表

class Solution:
    def hasCycle(self, head: ListNode) -> bool:
        if not head or not head.next :
            return False 

        slow = head
        fast = head
        while (fast and fast.next):
            slow = slow.next
            fast = fast.next.next
            if slow == fast:
                return True 
            
        return False

2.  合并两个有序链表

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        if not l1:
            return l2
        if not l2:
            return l1
        if l1.val <l2.val:
            l1.next = self.mergeTwoLists(l1.next,l2)
            return l1
        else:
            l2.next = self.mergeTwoLists(l1,l2.next)
            return l2

3. 相交链表

class Solution(object):
    def getIntersectionNode(self, headA, headB):
        ha, hb = headA, headB
        while ha != hb:
            ha = ha.next if ha else headB
            hb = hb.next if hb else headA
        return ha

4. 回文链表

def isPalindrome(self, head: ListNode) -> bool:
    vals = []
    current_node = head
    while current_node is not None:
        vals.append(current_node.val)
        current_node = current_node.next
    return vals == vals[::-1]

5. 反转链表

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        if not head or not head.next:
            return head
        pre = None
        while (head):
            cur = head.next 
            head.next = pre
            pre = head
            head = cur
        return pre

6. 删除链表的节点

class Solution:
    def deleteNode(self, head: ListNode, val: int) -> ListNode:
        pre = ListNode(-1)
        pre.next = head
        if head.val == val:return head.next
        while head and head.next:
            if head.next.val == val:
                head.next = head.next.next
            head = head.next
        return pre.next

7. 链表中倒数第k个节点

class Solution:
    def __init__(self):
        self.i = 0
    def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
        return self.getNode(head,k)
    def getNode(self,head,k):
        if not head:
            return 0
        # if not head.next:
        #     return 0
        res = self.getNode(head.next,k)
        self.i += 1
        if self.i == k:
            return head
        return res
发布了25 篇原创文章 · 获赞 1 · 访问量 1425

猜你喜欢

转载自blog.csdn.net/Matrix_cc/article/details/105124133
今日推荐