题目
给你单链表的头节点 ,请你反转链表,并返回反转后的链表。
这道题还是双指针的问题
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* p = head;
ListNode* data = NULL;
ListNode* pNext;
while(p!=NULL)
{
pNext = p->next;
p->next = data;
data = p;
p = pNext;
}
return data;
}
};
使用了一个迭代的方法,维护了三个指针,p指向当前要反转的节点,data指向已经反转好的链表的头节点,pNext指向p的下一个节点,用于保存原来的链表顺序。在循环中,每次都把p的next指针指向data,然后更新date为p,p为pNext,并且让pNext指向下一个节点。
当循环结束时,p变为NULL,而data就是反转后的链表的头节点。