티스토리 뷰

#include<stdio.h> #include<stdlib.h> typedef struct node{ int data; struct node *link; }Node; Node* createNode(int num) { Node *p; p=(Node*)malloc(sizeof(Node)); p->link=NULL; p->data=num; return p; }

//이전과 동일.

Node* reverse(Node *head) { Node *res,*tmp,*p=head; //결과 저장 res, 임시 저장 tmp //head를 따라가는 포인터 p res=tmp=NULL; while(p!=NULL) { tmp=res; //우선 뒤집을 포인터의 헤드를 따라간다. res=p; //뒤집을 포인터의 헤드로 간다. p=p->link; //뒤집을 포인터의 접근 위치를 다음으로 옮긴다. res->link=tmp;//뒤집을 포인터의 헤드 링크를 뒤집을 포인터에 삽입한다. } return res; //뒤집은 포인터의 결과 리턴 } int main(void) { Node *p,*head; p=head=createNode(10); p->link=createNode(20); p=p->link; p->link=createNode(30); p=p->link; p->link=createNode(40); p=p->link; p->link=createNode(50); printf("역순 연산 전 데이터 : "); for(p=head;p!=NULL;p=p->link) printf("%d -> ",p->data); printf("NULL"); printf("\n\n역순 연산 후 데이터 : "); for(p=reverse(head);p!=NULL;p=p->link) printf("%d -> ",p->data); printf("NULL"); return 0; }

단순 연결 리스트의 역순 연산이다.


먼저 임시 저장 노드(tmp)의 포인터를 결과 주소(res)로 넣어주고

결과 주소를 뒤집을 포인터의 맨 앞 노드로 넣어준다.

그 후 뒤집을 포인터의 맨 앞 노드에 있던 접근 위치(p)를 다음 노드로 옮겨주고

tmp를 임시 저장 노드와 링크시킨다. (물론 tmp->link 형식으로, tmp가 앞에 있다.)


과정

1. 10 > 20 > 30 > 40 > NULL / NULL

2. 20 > 30 > 40 > NULL / 10 > NULL

3. 30 > 40 > NULL / 20 > 10 > NULL

4. 40 > NULL / 30 > 20 > 10 > NULL

5. NULL / 40 > 30 > 20 > 10 > NULL


설명이 빈약해서 아쉽다..


http://toygift7.tistory.com/28


이곳에서 참고해 많은 도움을 얻었으니 이해가 잘 안된다면 열람하면 된다.

'Today I learned > 자료구조' 카테고리의 다른 글

트리(Tree)  (0) 2017.10.11
단순 연결 리스트 (1, 개념)  (0) 2017.09.19
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
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
글 보관함