[데이터 구조] - - 하나의 링크 를 두 개의 링크 로 나 눕 니 다.

교실 숙제
하나의 체인 시 계 를 두 개의 체인 시계 로 나누다.
요구: 링크 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); }

좋은 웹페이지 즐겨찾기