题目描述
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
思路
C++代码
//
// Created by YaMiwan on 2020-05-02.
//
#include <iostream>
using namespace std;
// * Definition for singly-linked list.
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {} // 结构体有参默认构造函数传入x值,next指针默认赋为空
};
class Solution {
public:
ListNode *reverseList(ListNode *head) { // reverseList:返回链表逆序后的头节点指针,head:链表头节点指针
ListNode *new_head = NULL; // 指向新链表头结点的指针
while (head){
ListNode *next = head->next; // 备份head->next,否则会丢失指针
head->next = new_head; // 跟新head->next,第一次循环相当于head->next = NULL
new_head = head; // 移动new_head
head = next; // 遍历原链表
}
return new_head;
}
};
int main(){ // 测试
ListNode a(1);
ListNode b(2);
ListNode c(3);
ListNode d(4);
ListNode e(5);
a.next = &b; // 将节点简单的链接,进行测试
b.next = &c; // 无需构造复杂的链表操作(插入、删除)
c.next = &d;
d.next = &e;
Solution solve;
ListNode *head = &a;
cout<<"Before reverse:"<<endl;
while (head){
cout<<head->val<<endl;
head = head->next;
}
head = solve.reverseList(&a); // 逆序
cout<<"After reverse:"<<endl;
while (head){
cout<<head->val<<endl;
head = head->next;
}
return 0;
}
输出
Before reverse:
1
2
3
4
5
After reverse:
5
4
3
2
1