체인 테이블 반전 (귀속과 비귀속 실현)
2195 단어 면접 문제
각각 귀속적인 방법과 비귀속적인 방법으로 실현하다.
체인 테이블 반전 중 보조 파라미터를 빌려 두 개의 바늘로 반전 Node* Reverse2 Point(List* head)를 완성할 수 있다
#include
#include
typedef int ElemType;
typedef struct Node {
int data;
struct Node* next;
}Node, *List;
// arr ;
int InitList(List *list, ElemType* arr, int num)
{
int i= 0;
Node* tail_node;
Node* tmp_node;
*list =(List)malloc(sizeof(Node));
if(NULL == *list)
return;
(*list)->data = arr[i];
(*list)->next = NULL;
tail_node = *list;
for(i = 1; i < num; i++) {
tmp_node = (Node*)malloc(sizeof(Node));
if(NULL == tmp_node)
return;
tmp_node->data = arr[i];
tmp_node->next = NULL;
tail_node->next = tmp_node;
tail_node = tmp_node;
}
}
void TraveseList(List list)
{
Node* tmp_node;
if(NULL == list)
return;
tmp_node = list;
while(tmp_node) {
printf("%d ", tmp_node->data);
tmp_node = tmp_node->next;
}
printf("
");
}
void ReverseList(List* list)
{
Node* p_pre = NULL;
Node* p_cur = NULL;
Node* p_nxt = NULL;
if(NULL == list)
return;
p_cur = (*list)->next;
p_pre = *list;
p_pre->next = NULL;
while(p_cur) {
p_nxt = p_cur->next;
p_cur->next = p_pre;
p_pre = p_cur;
p_cur = p_nxt;
}
*list = p_pre;
}
Node* Reverse2Point(List* head)
{
Node* p_cur = NULL;
Node* p_nxt = NULL;
if(NULL == *head)
return;
p_cur = (*head)->next;
(*head)->next = NULL;
while(p_cur) {
p_nxt = p_cur->next;
p_cur->next = *head;
*head = p_cur;
p_cur = p_nxt;
}
}
// ,
// , ( , -- )
Node* Reverse(Node* p_cur, Node* p_pre)
{
if(NULL == p_cur->next) {
p_cur->next = p_pre;
return p_cur;
}
else {
Node *p_nxt = p_cur->next;
p_cur->next = p_pre;
Reverse(p_nxt, p_cur);
}
}
int main()
{
List head;
Node* tmp;
int array[] = {3, 5, 7, 8, 2};
InitList(&head, array, 5);
TraveseList(head);
printf("reverse list:");
ReverseList(&head);
TraveseList(head);
printf("reverse list:");
head = Reverse(head, NULL);
TraveseList(head);
printf("reverse list:");
Reverse2Point(&head);
TraveseList(head);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 프로그래머 면접에서의 다중 스레드 문제 요약wait ()/notify ()/notify All () 의 모든 방법을 호출할 때, 현재 라인이 이 대상의 자물쇠를 얻지 못하면, Illegal MonitorState Exception의 이상을 던집니다. Thre...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.