标签:str ext 示例 img alt 节点 col etc mamicode
题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL来源:力扣(LeetCode)
class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *pre=NULL,*cur=head; while(cur){ ListNode *temp=cur->next; cur->next=pre; pre=cur; cur=temp; } return pre; } };
2.妖魔化的双指针
1.这种方法实际上只用了一个额外指针cur,每次使得head的下一个节点指向cur;
2.cur同时向前移动,head指向改变
class Solution { public: ListNode* reverseList(ListNode* head) { if (head == NULL) { return NULL; } ListNode* cur = head; while (head->next != NULL) { ListNode* t = head->next->next; head->next->next = cur; cur = head->next; head->next = t; //改变head的指向 } return cur; } };
3.递归解题
1.特殊情况,链表为空或者长度为1,此时可以返回head;
2.链表长度大于1,则访问到最后一个元素时开始依次有值回归;
3.每次使得指针的下一个节点指向该指针,并使得该指针指向NULL;
class Solution { public: ListNode* reverseList(ListNode* head) { if(head==NULL||head->next==NULL) return head; ListNode *ret= reverseList(head->next); head->next->next=head; head->next=NULL; return ret; } };
标签:str ext 示例 img alt 节点 col etc mamicode
原文地址:https://www.cnblogs.com/aaamax/p/12578495.html