反转链表:
记录牛客编程部分解题思路:
输入一个链表,反转链表后,输出新链表的表头。
处理思路:
将链表反向输出,可以使用三个/两个指针分别作为新链表的头尾节点,这里我使用的是head、mid、tail三个节点
(1)tail指针指向的是反转后的最后一个节点,所以指向nullptr
(2)mid是用来指向当前链表的,所以只需要赋值为链表值即可;
(3)head是指向待转后的第二个节点,当前赋值为空,循环中赋值为mid的下一个节点。
使用循环直至mid为空,即整个链表反转完毕。思路如图
解决方案:
class Solution {
public:
ListNode* ReverseList(ListNode* pHead)
{
ListNode* head=nullptr;
ListNode* tail=nullptr;
ListNode* mid=pHead;
while(mid)
{
head=mid->next;
mid->next=tail;
tail=mid;
mid=head;
}
return tail;
}
};