题目描述
题目链接:反转链表
主要题目就是反转链表:
例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解题思路
用的是迭代法。这个的一个特点就是往链表头部添加元素,天然具有倒序的特点。所以按照输入顺序直接添加元素,那么输出就是倒序。
代码思路就是:
- 先保存next结点。如果先执行的话,就会丢失next结点
- 修改next,指向新链表
- 修改pre为已添加的结点
- 修改cur指向下一个要添加的结点
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *pre=NULL;
ListNode *cur=head;
while(cur!=NULL){
//保存next
ListNode *next=cur->next;
//修改next
cur->next=pre;
//修改pre为已添加的结点
pre=cur;
//修改cur指向下一个要添加的结点
cur=next;
}
return pre;
}
};