LeetCode-HOTtop100之206. 翻转链表
程序员文章站
2022-03-15 20:35:41
...
欢迎关注公众号HeaiKun,里面有更多 C/C++ 学习内容,欢迎一起进步,一起学习。
题目
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
思路
使用三个指针,一个反转后的头指针,一个指向头部分离的节点,一个指向分离之后链表的头结点。
然后将分离出来的节点头插法 插入到 翻转后的链表中,直到所有的节点都分离头插入。
NO BB, show me code !!!
代码
/**
* 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) {
if(head == NULL)
return NULL;
ListNode * p = head->next; // 分离出节点之后的头指针
ListNode * ret = NULL; // 翻转之后的头指针
ListNode * q = head; //分离出来的节点指针
while(p != NULL)
{
q->next = ret;
ret = q;
q = p;
p = p->next;
}
q->next = ret;
ret = q;
return ret;
}
};