[면접문제] 단사슬표 반전-귀속과 비귀속
#include <stdio.h>
#include <stdlib.h>
typedef struct _Node
{
int data;
_Node* next;
}Node, *LinkList;
//
LinkList Reverse(LinkList &head)
{
if(head == NULL)
{
return NULL;
}
Node *pre, *cur, *next;
pre = head;
cur = head->next;
while(cur)
{
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
}
head->next = NULL;
head = pre;
return head;
}
//
// next NULL
LinkList RReverse(LinkList p, LinkList &head)
{
if( (p==NULL) || (p->next==NULL) )
{
head = p;
return p;
}
else
{
LinkList tmp = RReverse(p->next, head);
tmp->next = p;
return p;
}
}
bool CreateList(LinkList &head, const int *data, const int len)
{
Node *cur = NULL;
Node *next = NULL;
int i;
cur = (LinkList)malloc(sizeof(Node));
if(cur == NULL)
{
return false;
}
cur->data = data[0];
cur->next = NULL;
head = cur;
for(i=1; i<len; i++)
{
next = (LinkList)malloc(sizeof(Node));
if(next == NULL)
{
return false;
}
next->data = data[i];
next->next = NULL;
cur->next = next;
cur = cur->next;
}
return true;
}
void PrintList(LinkList head)
{
while(head != NULL)
{
printf(" %d", head->data);
head = head->next;
}
}
void main( void )
{
int data[] = {1, 2, 3, 4, 5, 6};
int len = sizeof(data)/sizeof(int);
LinkList head;
if( !CreateList(head, data, len) )
{
printf(" !
");
return;
}
printf(" :");
PrintList(head);
printf("
");
Reverse(head);
printf(" :");
PrintList(head);
printf("
");
LinkList tail = RReverse(head, head);
tail->next = NULL;
// ,
printf(" :");
PrintList(head);
printf("
");
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
면접 예상 질문: CSS, Javascript 고급position 속성이란? display 속성이란? flex: 1차원 (가로 or 세로) 적으로 배치할 수 있는 방식 grid: 2차원 (가로, 세로 동시에) 적으로 배치할 수 있는 방식 reset.css vs. s...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.