19. 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第 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:
扫描二维码关注公众号,回复:
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