LeetCode 题目-234.回文链表/237.删除链表中的结点(python实现)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39884947/article/details/88660681

作为要准备踏入码农行业的人来说,要准备校招,怎么能不去刷刷LeetCode呢?

234.回文链表

  • 题目要求:
    请判断一个链表是否为回文链表。

  • 示例:

输入: 1->2
输出: false

输入: 1->2->2->1
输出: true
  • 分析:
    方法一:遍历整个链表将值存到一个列表中 然后反转列表判断是否相等
class Solution(object):
    def isPalindrome(self, head):
        lists=[]
        while head is not None:
            lists.append(head.val)
            head =head.next
        return lists==lists[::-1]

方法二:使用快慢指针:快指针一定会先到达顶端或者顶端的前一个(奇偶不一样),而此时的慢指针会移到中位数。我们将后半部分反转进行判断是否相等

class Solution(object):
    def isPalindrome(self, head):
        slow, fast = head, head
        while fast and fast.next:
            fast = fast.next.next
            slow = slow.next
        #如果链表是奇数个则上方的慢指针还未停留在中位数
        if fast:
            slow = slow.next
        node =None
        #将链表反转
        while slow:
            nextone=slow.next
            slow.next =node
            node=slow
            slow=nextone
        while node and head:
            if node.val !=head.val:
                return False
            node =node.next
            head=head.next
        return True

237.删除链表中的结点

  • 题目要求:
    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。

  • 示例:

输入: head = [4,5,1,9], node = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.

输入: head = [4,5,1,9], node = 1
输出: [4,5,9]
解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.
  • 分析:不用开下面的实列,因为你会被误解。看题目已经说明白了:只被给定要求被删除的节点。所以我们的参数就只有一个带删除的结点。所以只要把当前的node转换成node的下一个节点就可以了。
class Solution(object):
    def deleteNode(self, node):
        node.val = node.next.val;
        node.next = node.next.next;

猜你喜欢

转载自blog.csdn.net/qq_39884947/article/details/88660681
今日推荐