[데이터 구조] - - 하나의 링크 를 두 개의 링크 로 나 눕 니 다.
2093 단어 데이터 구조 (엄 울 민 판)
하나의 체인 시 계 를 두 개의 체인 시계 로 나누다.
요구: 링크 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
1, 3, 5, 7, 9 로 나 뉜 다.
2, 4, 6, 8, 10 두 개의 체인 시계 와
생각:
방법 은 매우 간단 하 다. 바로 첫 번 째 결점 에서 두 번 째 존재 여 부 를 보 는 것 이다. 만약 에 존재 한다 면 두 번 째 것 을 링크 2 에 넣 고 링크 1 에서 삭제 한 다음 에 세 번 째 결점 으로 이동 하 는 것 이다. 똑 같이 네 번 째 존재 여 부 를 보고 존재 한다 면 링크 2 를 넣 고 삭제 한 다음 에 다섯 번 째 결점 에 이 어 여섯 번 째 것 을 판단 한다.
코드 및 설명:
#include
#include
#include
typedef struct LDataNode{
int x;
struct LDataNode *next;
}LDataNode;
typedef struct LHeadNode{
LDataNode *next;
LDataNode *tail;
}LHeadNode,*LinkList;
int InitList(LinkList *head){//
*head =(LinkList)malloc(sizeof(LHeadNode));
LDataNode *vhNode =(LDataNode *)malloc(sizeof(LDataNode));
if(*head==NULL||vhNode==NULL){
return -1;//
}
vhNode->next=NULL;
(*head)->next=vhNode;
(*head)->tail=vhNode;
return 0;
}
int AddList(LinkList *head,int a){//
LDataNode *vhNode =(LDataNode *)malloc(sizeof(LDataNode));
if(vhNode==NULL){
return -1;//
}
vhNode->x=a;
vhNode->next=NULL;
(*head)->tail->next=vhNode;//
(*head)->tail=vhNode;//
return 0;
}
int LTraverse(LinkList head){//
LDataNode *p=head->next->next;
while(p){
printf("%d ",p->x);
p=p->next;
}
printf("
");
return 0;
}
int main(){
LinkList head1;// 1
InitList(&head1);
// 1-10
for(int i=1;i<=10;i++){
AddList(&head1,i);
}
LTraverse(head1);// 1
LinkList head2;// 2
InitList(&head2);
// 1
LDataNode *p=head1->next->next;//
while(p){
if(p->next==NULL){ //
p=p->next;
break;
}
else{ // 2
int a=p->next->x;
AddList(&head2,a);
LDataNode *q=p->next->next;//
p->next=q;
p=p->next;
}
}
// 1 2
LTraverse(head1);
LTraverse(head2);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
완전 이 진 트 리 판단 (순서 저장)이 진 트 리 T 와 같은 높이 의 만 이 진 트 리 번호 가 있다 면 T 가 만 이 진 트 리 와 같은 번호 의 노드 위치 가 같다 면 이 진 트 리 T 는 완전 이 진 트 리 라 고 부른다.현재 가장자리 의 연결...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.