Skip to content

Commit 4893e9d

Browse files
author
arbent
committed
2018/11/15
1 parent a06362c commit 4893e9d

File tree

5 files changed

+227
-0
lines changed

5 files changed

+227
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/* 删除链表的倒数第N个节点
2+
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
3+
4+
示例:
5+
6+
给定一个链表: 1->2->3->4->5, 和 n = 2.
7+
8+
当删除了倒数第二个节点后,链表变为 1->2->3->5.
9+
说明:
10+
11+
给定的 n 保证是有效的。
12+
13+
进阶:
14+
15+
你能尝试使用一趟扫描实现吗? */
16+
17+
/**
18+
* Definition for singly-linked list.
19+
* type ListNode struct {
20+
* Val int
21+
* Next *ListNode
22+
* }
23+
*/
24+
func removeNthFromEnd(head *ListNode, n int) *ListNode {
25+
top, del, fin := head, head, head
26+
for i := 0; i < n; i++ {
27+
fin = fin.Next
28+
}
29+
if fin == nil {
30+
return top.Next
31+
}
32+
for ; fin.Next != nil; fin = fin.Next {
33+
del = del.Next
34+
}
35+
fin = del.Next
36+
del.Next = fin.Next
37+
return top
38+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/* 有效的括号
2+
给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。
3+
4+
有效字符串需满足:
5+
6+
左括号必须用相同类型的右括号闭合。
7+
左括号必须以正确的顺序闭合。
8+
注意空字符串可被认为是有效字符串。
9+
10+
示例 1:
11+
12+
输入: "()"
13+
输出: true
14+
示例 2:
15+
16+
输入: "()[]{}"
17+
输出: true
18+
示例 3:
19+
20+
输入: "(]"
21+
输出: false
22+
示例 4:
23+
24+
输入: "([)]"
25+
输出: false
26+
示例 5:
27+
28+
输入: "{[]}"
29+
输出: true */
30+
31+
func isValid(s string) bool {
32+
stack := make([]string, 0)
33+
p := 0
34+
var ops map[string]string
35+
ops = make(map[string]string)
36+
ops[")"] = "("
37+
ops["]"] = "["
38+
ops["}"] = "{"
39+
for i := 0; i < len(s); i++ {
40+
t := string(s[i])
41+
if t == "(" || t == "[" || t == "{" {
42+
stack = append(stack, t)
43+
p++
44+
} else {
45+
if len(stack) == 0 {
46+
return false
47+
}
48+
if stack[p-1] == ops[t] {
49+
stack = stack[:p-1]
50+
p--
51+
} else {
52+
return false
53+
}
54+
}
55+
}
56+
if p == 0 {
57+
return true
58+
} else {
59+
return false
60+
}
61+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/* 合并两个有序链表
2+
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
3+
4+
示例:
5+
6+
输入:1->2->4, 1->3->4
7+
输出:1->1->2->3->4->4 */
8+
9+
/**
10+
* Definition for singly-linked list.
11+
* type ListNode struct {
12+
* Val int
13+
* Next *ListNode
14+
* }
15+
*/
16+
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
17+
l := new(ListNode)
18+
start := l
19+
// if l1==nil{
20+
// return l2
21+
// }
22+
// if l2 ==nil{
23+
// return l1
24+
// }
25+
for l1 != nil && l2 != nil {
26+
l.Next = new(ListNode)
27+
l = l.Next
28+
if l1.Val <= l2.Val {
29+
l.Val = l1.Val
30+
l1 = l1.Next
31+
} else {
32+
l.Val = l2.Val
33+
l2 = l2.Next
34+
}
35+
// if l1==nil&&l2==nil{
36+
// return start
37+
// }
38+
39+
}
40+
if l1 != nil {
41+
l.Next = l1
42+
}
43+
if l2 != nil {
44+
l.Next = l2
45+
}
46+
return start.Next
47+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/* 两两交换链表中的节点
2+
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
3+
4+
示例:
5+
6+
给定 1->2->3->4, 你应该返回 2->1->4->3.
7+
说明:
8+
9+
你的算法只能使用常数的额外空间。
10+
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 */
11+
12+
/**
13+
* Definition for singly-linked list.
14+
* type ListNode struct {
15+
* Val int
16+
* Next *ListNode
17+
* }
18+
*/
19+
func swapPairs(head *ListNode) *ListNode {
20+
top := head
21+
if top != nil && top.Next != nil {
22+
top = top.Next
23+
}
24+
p := head
25+
til := p
26+
if p != nil {
27+
a := p
28+
b := p.Next
29+
p = p.Next
30+
if p == nil {
31+
return top
32+
}
33+
//交换a,b
34+
p = p.Next
35+
b.Next = a
36+
a.Next = p
37+
til = a
38+
}
39+
if p != nil {
40+
til.Next = swapPairs(p)
41+
}
42+
return top
43+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/* 有效的字母异位词
2+
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
3+
4+
示例 1:
5+
6+
输入: s = "anagram", t = "nagaram"
7+
输出: true
8+
示例 2:
9+
10+
输入: s = "rat", t = "car"
11+
输出: false
12+
说明:
13+
你可以假设字符串只包含小写字母。
14+
15+
进阶:
16+
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况? */
17+
18+
func isAnagram(s string, t string) bool {
19+
if len(s) != len(t) {
20+
return false
21+
}
22+
if s == t {
23+
return true
24+
}
25+
m := make(map[rune]int)
26+
for _, v := range s {
27+
m[v] = m[v] + 1
28+
}
29+
for _, v := range t {
30+
m[v] = m[v] - 1
31+
}
32+
for _, v := range m {
33+
if v != 0 {
34+
return false
35+
}
36+
}
37+
return true
38+
}

0 commit comments

Comments
 (0)