Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

연결 목록의 마지막 k 노드를 역순으로 인쇄 C 언어의 반복적 접근

<시간/>

연결 리스트의 k개 노드를 역순으로 출력해야 합니다. 이 문제를 해결하려면 반복적인 접근 방식을 적용해야 합니다.

반복 방법은 일반적으로 조건이 값 1 또는 true를 유지할 때까지 실행되는 루프를 사용하는 방법입니다.

목록에 노드 29, 34, 43, 56 및 88이 포함되어 있고 k의 값이 2인 경우 출력은 56 및 88과 같이 k가 될 때까지 대체 노드가 됩니다.

연결 목록의 마지막 k 노드를 역순으로 인쇄 C 언어의 반복적 접근

예시

연결 목록:29->34->43->56->88입력:2출력:56 88

목록에서 마지막 k개의 요소를 제거해야 하므로 가장 좋은 방법은 목록을 생성할 요소가 푸시되고 스택의 시작 요소가 목록의 마지막 요소인 스택 데이터 구조를 사용하는 것입니다. 연결 목록의 마지막 노드를 제공하는 k번째 횟수까지 스택에서 튀어나옵니다.

아래 코드는 주어진 알고리즘의 c 구현을 보여줍니다.

알고리즘

START 1단계 시작 -> 유형 구조의 노드 변수 생성 int 데이터 선언 *next 단계 2를 사용하여 노드 유형 포인터 선언 -> struct node* 생성 intoList(int data) malloc을 사용하여 newnode 생성 Set newnode->data =data newnode ->next =NULL return newnode 3단계 -> 함수 선언 void rev(struct node* head,int count, int k) create struct node* temp1 =head Loop While(temp1 !=NULL) count++ temp1 =temp1->next end int array[count] 선언, temp2 =count,i Set temp1 =head Loop While(temp1 !=NULL) Set array[--temp2] =temp1->data Set temp1 =temp1->next End Loop For i =0 및 i  In Main() struct node*를 사용하여 목록 생성 head =intoList(9) k=3 및 count=0 설정 rev(head,count,k)STOP<호출 /사전> 

예시

#include#include// nodestruct 노드의 구조 { int data; struct node *next;};//새로운 nodestruct node* intoList(int data) { struct node* newnode =(struct node*)malloc(sizeof(struct node)); newnode-> 데이터 =데이터; newnode->다음 =NULL; return newnode;}// nodevoid의 요소를 역으로 출력하는 함수 rev(struct node* head,int count, int k) { struct node* temp1 =head; while(temp1 !=NULL) { count++; temp1 =temp1->다음; } int 배열[카운트], temp2 =카운트, i; temp1 =머리; while(temp1 !=NULL) { 배열[--temp2] =임시1->데이터; temp1 =temp1->다음; } for(i =0; i next =intoList(76); 머리->다음->다음 =intoList(13); 머리->다음->다음->다음 =intoList(24); 머리->다음->다음->다음->다음 =intoList(55); 머리->다음->다음->다음->다음->다음 =intoList(109); 정수 k =3, 개수 =0; rev(머리, 개수, k); // 역으로 출력하는 함수 호출 return 0;}

출력

위의 프로그램을 실행하면 다음과 같은 출력이 생성됩니다.

목록의 역순:109 55 24