【LeetCode】day7

19. 删除链表的倒数第N个节点


给定一个链表,删除链表的倒数第 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

说明:

给定的 n 保证是有效的。

进阶:

你能尝试使用一趟扫描实现吗?

思路:i和i+2位置的指针同时后移

class Solution:
    def removeNthFromEnd(self, head, n):
        if n == 0:
            return head
        a = head
        for i in range(n):
            a = a.next
        if a == None:
            return head.next
        b = head
        while a.next != None:
            a = a.next
            b = b.next
        c = b.next
        b.next = c.next
        return head

20. 有效的括号

给定一个只包括 '('')''{''}''['']' 的字符串,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。

注意空字符串可被认为是有效字符串。

示例 1:

扫描二维码关注公众号,回复: 2430380 查看本文章
输入: "()"
输出: true

示例 2:

输入: "()[]{}"
输出: true

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true

思路:栈

class Solution:
	def fit(self,s1,s2):
		if s1 == '(' and s2 == ')':
			return True
		elif s1 == '{' and s2 == '}':
			return True
		elif s1 == '[' and s2 == ']':
			return True
		else:
			return False
	def isValid(self, s):
		a = []
		for i in s:
			if(a == []):
				a.append(i)
			elif(not self.fit(a[-1],i)):
				a.append(i)
			else:
				a.pop()
		if a == []:
			return True
		else:
			return False

21. 合并两个有序链表

将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

示例:

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
	def mergeTwoLists(self, l1, l2):
		a = l1
		b = l2
		head = ListNode(0)
		c = head
		while a != None and b != None:
			if(a.val <= b.val):
				d = ListNode(a.val)
				a = a.next
			else:
				d = ListNode(b.val)
				b = b.next
			c.next = d
			c = c.next
		if a == None:
			c.next = b
		else:
			c.next = a
		return head.next

猜你喜欢

转载自blog.csdn.net/sinat_33969299/article/details/81206610