题目
输入一个链表,反转链表后,输出新链表的表头。
思路
用两个临时指针,一个指向当前指针的上一个结点,一个指向当前指针的下一个结点,然后改变当前指针指向的当前结点的指针的方向
示例
输入:0 1 2 3 4 5 6 7
输出:7 6 5 4 3 2 1 0
代码
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode * next;
ListNode(int x):
val(x),next(nullptr){
}
};
class Solution {
public:
ListNode* ReverseList(ListNode* pHead){
ListNode *temp1(nullptr),*temp2(nullptr);
//判断空链表
if(pHead == nullptr )
return pHead;
while (pHead != nullptr){
// 指向当前结点的下一个结点
temp2 = pHead ->next;
// 改变当前结点的指针指向
pHead ->next = temp1;
temp1 = pHead;
// 当前指针移向下一个结点
pHead = temp2;
}
return temp1;
}
};
int main(){
Solution re;
struct ListNode* head,*list,*pinput;
struct ListNode node(0);
pinput = head = list = &node;
for (int i = 1; i < 8; ++i) {
struct ListNode *p = new ListNode(i);
head -> next = p;
head = head -> next;
}
while (pinput!=nullptr){
cout << pinput->val << " ";
pinput = pinput -> next;
}
cout << endl;
ListNode *pl(re.ReverseList(list));
for (int i = 0; i < 8; ++i) {
cout << pl ->val << " ";
pl = pl -> next;
}
return 0;
}