
2025.04.12
void RecursiveReverse(ListNode **ptrHead)
{
/* add your code here */
ListNode* cur = (*ptrHead)->next;
ListNode* prev = *ptrHead;
//empty or len == 1 처리
if(prev == NULL || cur == NULL){
return;
}
RecursiveReverse(&(prev -> next));
//RecursiveReverse(&(cur)) <- ptr
// 밑에서 올라오면서 처리
cur->next = prev;
prev->next = NULL;
*ptrHead = cur;
}
| 표현 | 의미 | 주소가? |
|---|---|---|
cur = prev->next | cur는 prev->next를 가리킴 | cur은 지역 변수 |
&cur | cur 변수의 주소 (스택에 존재) | 🔴 리스트랑 연결 없음 |
&prev->next | 리스트 상에서 실제 next 포인터의 주소 | 🟢 리스트 구조에 연결됨 |
//수정한 코드
void RecursiveReverse(ListNode **ptrHead)
{
/* add your code here */
//empty or len == 1 처리
if (*ptrHead == NULL || (*ptrHead)->next == NULL){
return;
}
ListNode* prev = *ptrHead;
*ptrHead = prev->next;
RecursiveReverse(&(*ptrHead));
// 밑에서 올라오면서 처리
prev->next->next = prev; //방향 바꿈
prev->next = NULL; //기존 방향 끊기
}
ptrHead뿐.push할 때 마다 헤드에 붙음enque할 때 마다 테일에 붙음(1) removeOddValues()
deque 후 짝수면 다시 큐에 enque(2) removeEvenValues()
pop 후 홀수면 임시 스택temp 에다가 넣음pop 해서 원본 스택에 push import sys
input = sys.stdin.readline
n = int(input().strip())
line = list(map(int,input().split()))
stk = [0]
cur = 1
for i in line:
while(stk[-1] == cur):
stk.pop()
cur += 1
if cur == i :
cur += 1
continue
if cur < i:
stk.append(i)
while(stk):
if cur == stk[-1]:
cur += 1
stk.pop()
else:
break
if stk[-1] != 0:
print("Sad")
else:
print("Nice")