데이터 구조 - 단일 순환 링크 의 역 치
10695 단어 데이터 구조
방법 1:
, , , , 。
C 언어 코드 구현:
void reverseList(PList x){
if(x->head!=x->tail&&x->head->next!=x->tail){
PNode p=x->head;
PNode c=NULL,n=x->tail;
//
x->tail=p->next;
do{
c=p->next;
p->next=n;
n=p;
p=c;
}while(p!=x->head);
}
}
방법 2:
, , , 。
C 언어 코드 구현:
void reverseList(PNode x,PList l){
if(x!=l->tail){
reverseList(x->next,l);
x->next->next=x;
}
// head tail
if(x==l->head){
PNode t=x->next;
x->next=l->tail;
l->tail=t;
}
}
전체 디 버 깅 코드:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Node{
int data;
Node *next;
}Node,*PNode;//
typedef struct List{
PNode head;
PNode tail;
int length;
}List,*PList;//
void initList(PList x){
PNode headNode=(PNode)malloc(sizeof(Node));
if(!headNode)
exit(0);
headNode->data=0;
headNode->next=headNode;
x->head=headNode;
x->tail=headNode;
x->length=0;
}//
int insertNode(PList x,int i,int e){
if(i>x->length)
return 1;
PNode newNode=(PNode)malloc(sizeof(Node));
if(!newNode)
exit(0);
newNode->data=e;
PNode p=x->head;
for(int j=0;j<i;j++)
p=p->next;
newNode->next=p->next;
p->next=newNode;
if(i==x->length)
x->tail=newNode;
x->length++;
return 0;
}//
int deleteNode(PList x,int i){
if(i>x->length)
return 1;
PNode p=x->head;
for(int j=0;j<i-1;j++)
p=p->next;
PNode delNode=p->next;
p->next=delNode->next;
if(i==x->length)
x->tail=p;
free(delNode);
x->length--;
return 0;
}//
void outputList(PList x){
PNode p=x->head->next;
for(int i=0;i<x->length;i++){
printf("%3d",p->data);
p=p->next;
}
printf("
");
}//
int deleteList(PList x){
while(x->length>0){
deleteNode(x,x->length);
x->length--;
}
free(x->head);
x->head=NULL;
x->tail=NULL;
}//
void reverseList(PNode x,PList l){
if(x!=l->tail){
reverseList(x->next,l);
x->next->next=x;
}
// head tail
if(x==l->head){
PNode t=x->next;
x->next=l->tail;
l->tail=t;
}
}//
int main(){
//
PList myList=(PList)malloc(sizeof(List));
initList(myList);
//
int e=0;
printf(" (10 ):");
for(int i=0;i<10;i++){
scanf("%d",&e);
insertNode(myList,myList->length,e);
}
//
outputList(myList);
//
reverseList(myList->head,myList);
//
outputList(myList);
//
deleteList(myList);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.