本文共 854 字,大约阅读时间需要 2 分钟。
方法一:循环
利用prev将链表指针指依次向其前驱。方法二:递归
最后的节点作为开头节点往前倒推:方法三:栈或者数组
设置额外的空间,例如栈,利用其先进后出的特性完成翻转;或者将链表元素依次放入数组中逆序输出。//方法一:循环迭代class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* curr = head;//初始化定义curr ListNode* prev = nullptr;//定义prev,初始化为空 while(curr){ ListNode* next =curr->next; // ↑用于暂存next指向下一个节点,没有这句会导致执行一次以后链表断掉 curr->next = prev; prev = curr; curr = next; } return prev; }};
//方法二:class Solution { public: ListNode* reverseList(ListNode* head) { if(!head || !head->next)return head;//头或者头结点的下一个节点为空 ListNode* newH = reverseList(head->next);//递归 head->next->next = head;//指向自己 head->next = nullptr;//此时的head是尾结点 return newH; }};
方法一结果:
方法二结果:
转载地址:http://ziexi.baihongyu.com/