자료구조 공부 중 관련 문제를 열심히 뒤지다가 그나마 쉬운 걸로 풀었다.
연결된 리스트가 [1,2,3,4,5]가 있으면 reversed 해서 [5,4,3,2,1] 로 연결리스트를 리턴하면 된다.
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head){
struct ListNode *p, *q, *r;
p = head;
q = NULL;
while (p!= NULL)
{
r = q;
q = p;
p = p->next;
q->next = r;
}
return q;
}
포인터를 3개를 돌려준다.
아이디어는 책에서 따오긴 했지만..
기분 좋다.
포인터 p는 역순으로 만들 리스트 헤드
포인터 q는 역순으로 만들 노드
포인터 r->q->p를 따라가면서 역순으로 다 바꾼다.
느낌은 swap느낌이쥬/
이 문제는 쉬운 편이라고 한다. EASY 난이도.
사실 Linked-list 구글링하다가 HARD 난이도를 봤는데
하..C로 하려니 함수 제시에 바로 이중포인터가 등장..
머리가 너무 아프드.. 그래도 최대한 해보려고 한다.
자료구조를 공부하면서 좀 느낀 건 웬만하면 사람들은 c++이나 파이썬으로 자료구조를 구현한다는 점이다.. 뭐 배운건 많다. C로 힘들게 힘들게 하면서..?
나도 파이썬으로 공부하는 게 좋을 것 같다.
파이썬 자료구조와 c++ ..화이팅이다.
한 계절이 지나가고 있다.