美文网首页
leetcode刷题-链表

leetcode刷题-链表

作者: 噗嗤噗哩噗通 | 来源:发表于2021-12-28 14:59 被阅读0次

链表题目汇总:

主要是发现

206

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def reverseList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if head == None:
            return head
        ###
        if head.next == None:
            return head
        ### 
        prev=ListNode(head.val)
        curr=head.next
        ####
        while curr!= None:
             tmp = curr.next
             curr.next=prev
             prev=curr
             curr=tmp

        return prev

141
环形链表(快慢指针)

--- hash table 
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
   def hasCycle(self, head):
       """
       :type head: ListNode
       :rtype: bool
       """
       if not head or not head.next:
           return False
       
       slow = head
       fast = head.next

       while slow != fast:
           if not fast or not fast.next:
               return False
           slow = slow.next
           fast = fast.next.next
       
       return True

21
写递归


# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
   def mergeTwoLists(self, list1, list2):
       """
       :type list1: Optional[ListNode]
       :type list2: Optional[ListNode]
       :rtype: Optional[ListNode]
       """
       ###### 
       if not list1  :
           return list2
       elif  not list2 :
           return list1

       if list1.val <= list2.val:
           list1.next=self.mergeTwoLists(list1.next,list2)
           return list1 
       else :
           list2.next=self.mergeTwoLists(list1,list2.next)
           return list2 





19


# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
            a = head
            b = head
            for i in range(n):
                if a.next:
                    a = a.next
                else:
                    return head.next
            
            while a.next:
                a = a.next
                b = b.next
                print(head)

            b.next = b.next.next
            print (b)
            print (head)
            return head

876

快慢指针,一个走2步,一个走1步。

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def middleNode(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if not head:
            return head
        
        if not head.next:
            return head
        
        fast=head
        slow=head

        while fast.next!=None:
              if not fast.next.next : 
                  slow=slow.next
                  print slow
                  return slow
              else :
                  fast=fast.next.next
                  slow=slow.next

        return slow


21 合并有序链表:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution(object):
    def mergeTwoLists(self, list1, list2):
        """
        :type list1: Optional[ListNode]
        :type list2: Optional[ListNode]
        :rtype: Optional[ListNode]
        """
        re=ListNode(0)
        if list1 == None :
            return list2
        elif list2 == None:
            return list1
        
        if list1.val <= list2.val:
            re.val=list1.val
            re.next = self.mergeTwoLists( list1.next, list2)
        else : 
            re.val=list2.val
            re.next = self.mergeTwoLists( list1, list2.next)
        
        return re
        
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        if (list2 == nullptr ){
            return list1;
        } else if (list1 == nullptr ) {
            return list2;
        } else if (list1->val <= list2->val) {
            list1->next = mergeTwoLists(list1->next,list2);
            return list1 ;  
        } else  {
            list2->next = mergeTwoLists(list1,list2->next);
            return list2;
        }  
    }
};

相关文章

网友评论

      本文标题:leetcode刷题-链表

      本文链接:https://www.haomeiwen.com/subject/hqelqrtx.html