题目描述
输入一个链表,反转链表后,输出新链表的表头。
解题思路
设置两个ListNode的指针,first和second,在遍历的同时,使得second->next的值为first,然后注意处理下边界情况即可,具体代码如下:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution
{
public:
ListNode* ReverseList(ListNode* pHead)
{
int len = getLen(pHead);
if (len == 0) return nullptr;
if (len == 1) return pHead;
else
{
ListNode* first = nullptr;
ListNode* second = pHead;
ListNode* tmp = nullptr;
for (int i = 0; i < len; i++)
{
tmp = second->next;
second->next = first;
first = second;
if (tmp) second = tmp;
}
return second;
}
}
int getLen(ListNode* ptr)
{
int res = 0;
while(ptr)
{
res++;
ptr = ptr->next;
}
return res;
}
};