포춘은 7 명 기준으로는 단방향 및 양방향 연결리스트를 역 class3- 프랑스 타이틀을 왼쪽

포춘은 7 명 기준으로는 단방향 및 양방향 연결리스트를 역 class3- 프랑스 타이틀을 왼쪽

문제 1 : 역 단일 연결리스트

[필수] 사슬 길이는 N, O의 시간 복잡도 요구 (N), 추가적인 공간이면
O의 복잡성 요구 (1)

분석 (1)

반전 단일 연결리스트 반복법을 사용할 수 있으며, 이는 세 포인터 각각 전방 노드 레코드 현재 노드와 노드를 요구한다. 노드 전에 현재 노드 포인트를 반전하는 경우, 현재 노드와 뒤로 이전 노드는 반전이 끝날 때까지 계속합니다. 노드를 변경하려면 현재 노드 지점 이후 반전의 연결이 끊어집니다 후에 때문에이 필요하므로 현재 노드의 노드에 대한 포인터를 개최합니다. 반복의 전반적인 상태는 현재 노드가 비어 있지입니다.

2. 핵심 코드

(1) 전체 목록 생성
데이터 구조, 데이터 필드 발 등을 ① * 노드가 포인터 타입 ListNode을 정의하도록, 가리켰다 보낸 다음 노드로 다음 포인트.

typedef struct ListNode
{
	int val;
	ListNode *next;
}*List;

새로운 노드가 마지막에 삽입됩니다 ② 보간을 사용하여 꼬리

malloc에 저장 공간 크기에 공간을 개방에 대한 책임입니다 sizeof(ListNode)기본 malloc을 무효 *, 목록 형 구조 포인터에 캐스팅을 필요로 복귀 할 예정. L 일시적 테일 노드가 헤드 노드를 가리키고,리스트의 선두의 어드레스를 저장할뿐만 아니라 데이터를 저장하는 헤드 노드이다. 다음 P 개방 노드 데이터를 저장하고, 새 노드 구성 목록 테일 노드의 다음 노드로 꼬리 신규 노드 및 새로운 스토리지 노드를 개발하기 위해 계속. 마지막으로, 꼬리 노드를 null로.

	ListNode* L = (List)malloc(sizeof(ListNode));
	//List L = (List)malloc(sizeof(ListNode));与上式等价
	L->next = NULL;

	//使用尾插法
	List p,r;//p是新结点,r是尾节点
	r = L;	//把尾节点指向头节点
	for(int i = 0;i < N;i++)
	{
		p = (List)malloc(sizeof(ListNode));
		p->val = i * 5;
		r->next = p;
		r = p;
	}
	r->next = NULL;

(2) 단일 사슬 역전

List reverseList(List head) 
{
	List pre = NULL;
	List cur = head->next;//需要反转的当前节点从头节点的下一个开始
	while(cur != NULL)
	{
		List temp = cur->next;
		cur->next = pre;
		pre = cur;
		cur = temp;
	}
	
	return pre;
}

3. 전체 코드

#include<iostream>
#include<stdlib.h>
//#include<time.h>
#define N 5
typedef struct ListNode
{
	int val;
	ListNode *next;
}*List;



List reverseList(List head) 
{
	List pre = NULL;
	List cur = head->next;
	while(cur != NULL)
	{
		List temp = cur->next;
		
		cur->next = pre;
		pre = cur;
		cur = temp;
	}
	
	return pre;
}

int main()
{
	//srand(time(0));
	ListNode* L = (List)malloc(sizeof(ListNode));
	//List L = (List)malloc(sizeof(ListNode));与上式等价
	L->next = NULL;

	//使用尾插法
	List p,r;//p是新结点,r是尾节点
	r = L;	//把尾节点指向头节点
	for(int i = 0;i < N;i++)
	{
		p = (List)malloc(sizeof(ListNode));
		//p->val = rand() % 15;
		p->val = i * 5;
		r->next = p;
		r = p;
	}
	r->next = NULL;

	List newhead = NULL;
	newhead = reverseList(L) ;

	system("pause");
	return 0;
}

4. 출력

L은 링크리스트를 일본어 방법이며, 발은 제 1 헤드 노드이다
그림 삽입 설명 여기
방법 연결리스트 반전 후.
그림 삽입 설명 여기

주제 2 : 역 이중 연결리스트

단방향 및 양방향 연결 목록 역방향
단방향 링크리스트 반전 기능을 달성하고 이중 연결리스트를 반대로 각각 [제목].
[필수] 사슬 길이는 N, O의 시간 복잡도 요구 (N), 추가적인 공간이면
O의 복잡성 요구 (1)

분석 (1)

이중 연결리스트는 단지 사전 포인터와 교환 현재 노드의 다음 포인터, 각 노드에 대해 별도의 운영 및 기타하지 노드를 반대해야합니다.

2. 핵심 코드

생성 (1) 이중 연결리스트
이중 연결리스트 데이터 구조 포인터 필드 데이터 개의 필드로 구성;


typedef struct doublelist
{
	int val;
	doublelist* next;
	doublelist* pre;

}*List;

이중 연결리스트 꼬리 보간 점을 제외하고 실질적으로 동일한 방식으로 증가 된 프리 포인터를 기록하는 단계;

	List p,r,head = NULL;
	r = NULL;
	for(int i = 0;i < 4;i++)
	{
		p = (List)malloc(sizeof(doublelist));
		p->val = 5 * i;
		p->pre = r;
		if(r == NULL)
		{
			r = p;
			head = p;
			continue;
		}
		r->next = p;
		r = p;
	}
	r->next =NULL;

(2) 이중 연결리스트를 역 회전
다음 포인터 중간 임시 변수를 사용하고 다음의 포인터를 미리 교환 이전 노드 마지막 포인터가 현재 노드에 할당되고, 계속해서 역방향. 그 참고 포인터로 다음 포인터가 이미 노드에 대한 첫 번째 포인터는 실제로 다음 노드는 그래서, 교환 사전.

List reverseList(List head) 
{
	List p = head;
	List temp = NULL;
	while(p!=NULL)
	{
		temp = p->next;
		p->next = p->pre;
		p->pre = temp;
		p = p->pre;
	}
	
	return head;
}

3. 전체 코드

#include<iostream>

typedef struct doublelist
{
	int val;
	doublelist* next;
	doublelist* pre;

}*List;

List reverseList(List head) 
{
	List p = head;
	List temp = NULL;
	while(p!=NULL)
	{
		temp = p->next;
		p->next = p->pre;
		p->pre = temp;
		p = p->pre;
	}
	return head;
}

int main()
{
	List p,r,head = NULL;
	r = NULL;
	for(int i = 0;i < 4;i++)
	{
		p = (List)malloc(sizeof(doublelist));
		p->val = 5 * i;
		p->pre = r;
		if(r == NULL)
		{
			r = p;
			head = p;
			continue;
		}
		r->next = p;
		r = p;
	}
	r->next =NULL;
	
	List newhead = NULL;
	newhead = reverseList(head) ;

	return 0;
}

4. 출력

당신은 다음 방향 0,5,10,15 다음에 링크 된 목록을 작성하고, 사전에 방향이 비어있는 경우,
그림 삽입 설명 여기
전 방향 0,5,10,15, 이미 이중 연결리스트를 볼 수 있습니다 동안 다음 목록이 비어 방향을 반대로 한 후 역.
그림 삽입 설명 여기

게시 51 개 원래 기사 · 원 찬양 한 · 전망 1383

추천

출처blog.csdn.net/shi_xiao_xuan/article/details/103700827