题目:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解题方法:
链表相关的题目边界判断以及处理过程中的逻辑是比较绕的,这道题我做的比较顺利,先说一下解题思路:
- 设置三个指针: prev,cur,next,分别指向最开始的三个节点(第三个可以是NULL);
- 然后开始反转第一第二个节点:cur->next=prev;
- 更新三个节点:prev=cur;cur=next;next=next->next;
- 循环至cur=NULL。
还需要注意的就是如果链表只有一个节点或者没有节点,这种需要在一开始单独做判断。
代码和结果:
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==NULL||head->next==NULL)
return head;
ListNode *cur=head->next;
ListNode *prev=head;
ListNode *next=head->next->next;
prev->next=NULL;
while(cur!=NULL)
{
cur->next=prev;
if(next==NULL)
break;
else
{
prev=cur;
cur=next;
next=next->next;
}
}
return cur;
}
};
运行结果:
原题链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof/
网友评论