동주가 나보고 자세 조심하라고 보내준 사진으로 시작 ㅋㅋㅋ
21/08/03
7월 어디갔냐고요?
ㅋㅋ웃기다 ㅋㅋ 사실 안 웃김
드디어 리스트를 마무리,,,!
리스트를 반대로 뒤집기
1) 한번 스캔 하면서 다 뒤집기
listPointer invert(listPointer lead)
{
listPointer middle, trail;
middle = NULL;
while(lead) {
trail = middle;
middle = lead;
lead = lead->link;
middle->link = trail;
}
return middle;
}
middle, trail 라는 변수 선언
middle은 세개의 노드가 있다고 생각했을 때 지금 내가 링크 필드를 바꿔야할 노드
(요약 필요)
2개의 링크리스트를 이어붙이기
ptr1이 null이 될 때까지 스캔 하고 나서 null 자리에 ptr2를 넣어 이어 붙임
return ptr1;
1) 만약 ptr1 이나 ptr2가 null이라면?
ptr1 = null -> return ptr2
Ptr2 = null -> retrun ptr1
2) else
temp = ptr1 ( 맨 앞 노드를 가리키게 return 해야 하기 때문에 보관필요
temp->link가 null인 것이 마지막 노드이기 때문에 null이 아닐 때까지 반복, temp->link를 쭉 따라가기 를 for 문으로 정리하자면?
for (temp = ptr1; temp->link; temp = temp->link)
temp->link가 null을 가리키는 순간? (맨 마지막 노드를 가리키는 순간 ㅇㅇ)
for문은 빠져나옴
temp->link = ptr2 를 가리키게 한다
return ptr1
맨 앞 노드를 가리키게함
노드라는 변수에 새롭게 추가하려는 데이터가 들어가 있음
last가 가지고 있는 값을 따라가면 그 변수 메모리에는 circularlist의 맨 마지막 주소값을 가지고 있다.
(추가필요)
do while 을 사용했음
cnt = 0으로 초기화 해두고
last는 맨 마지막 노드를 가리키는 변수
temp= Last 해두고, temp와 last가 같지 않을 동안 ( 한 바퀴를 돌아서 다시 같아질 동안) cnt를 계속 증가시키면 cnt 값이 리스트의 길이가 된다