-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path20.有效的括号.cpp
74 lines (70 loc) · 1.59 KB
/
20.有效的括号.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
* @lc app=leetcode.cn id=20 lang=c
*
* [20] 有效的括号
*/
// @lc code=start
bool isValid(char *s)
{
//链表实现栈
typedef struct
{
struct Node *pre;
char si;
struct Node *next;
} Node;
Node *Stack = (Node *)malloc(sizeof(Node)); //建立栈
Stack->pre = NULL;
Stack->si = '\0';
Node *end = Stack; //用于尾端插入
int i = 0; // i控制s的位置
char ch = *(s + i); //获取ch
while (ch != '\0' && ch) //判断操作
{
switch (ch)
{
case '(':
case '{':
case '[':
{
Node *NewNode = (Node *)malloc(sizeof(Node)); //新建节点
NewNode->si = ch; //存入字符
NewNode->next = NULL;
end->next = NewNode; //尾端next指向
NewNode->pre = end; //新建指向
end = end->next; // end移动
break;
}
case ')':
{
if (end->si == '(')
end = end->pre; // pop()
else
return false;
break;
}
case '}':
{
if (end->si == '{')
end = end->pre;
else
return false;
break;
}
case ']':
{
if (end->si == '[')
end = end->pre;
else
return false;
break;
}
}
i++;
ch = *(s + i);
}
if (end->si != '\0')
return false;
return true;
}
// @lc code=end