leetcode206-反转链表

leetcode206:反转链表

链表基础知识

解题思路

  1. 核心代码(leetcode/牛客可执行)
class Solution {
public:
ListNode* reverseList(ListNode* head) {  //定义一个返回值为ListNode型的函数,函数参数为ListNode型的指针
    ListNode* NewHead = nullptr; //定义一个初始为空的指向ListNode型的指针,这个指针将作为新链表的头结点
    ListNode* node;  //中转结点
    while(head != nullptr){  //判断是否为空结点,即是否到了链表尾
        //旧链表头删 
        node = head;
        head = head->next;
        
        //头插新结点
        node->next = NewHead;
        NewHead = node;
    }
    return NewHead; 
    }
};

  1. 完整可运行代码
#include<iostream>

using namespace std;
#define MAX 1000

struct ListNode {
	int num;
	ListNode* next;
};

//ListNode* CreatNode(int a[], int n);  


ListNode* CreatNode(int a[], int n) {  //定义创建链表的函数,参数为数组
	ListNode* head;  //ListNode型指针,作为新建指针的头结点
	ListNode* phead;
	ListNode* newnode;
	int i;
	phead = new ListNode;
	phead->num = a[0];
	head = phead;
	for (i = 1; i < n; i++) {
		newnode = new ListNode;
		newnode->num = a[i];
		newnode->next = nullptr;
		phead->next = newnode;
		phead = phead->next;
	}
	return head;
}

ListNode* reverseList(ListNode* head) {
	ListNode* phead;
	ListNode* node;
	ListNode* NewHead = nullptr;
	phead = head;
	while (phead != nullptr) {
		node = phead;
		phead = phead->next;

		node->next = NewHead;
		NewHead = node;
	}

	return NewHead;
}

void PrintList(ListNode* head) {
	ListNode* phead;
	phead = head;
	while (phead != nullptr) {
		cout << phead->num << "->";
		phead = phead->next;
	}
	cout << "NULL" << endl;
}



int main() {
	int i;
	int n;
	int a[MAX];
	cin >> n;
	for (i = 0; i < n; i++) {
		cin >> a[i];
	}
	ListNode* head;
	head = CreatNode(a, n);
	//cout << head->next->next->num;

	PrintList(head);

	ListNode* NewHead = reverseList(head);
	PrintList(NewHead);

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值