目录
链接:
题目:
思路:
代码:
图片:
链接:
原题链接
题目:
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
思考题:
- 请同时实现迭代版本和递归版本。
数据范围
链表长度 [0,30][0,30]。
样例
输入:1->2->3->4->5->NULL 输出:5->4->3->2->1->NULL
思路:
好难,想了好久才想清楚qaq
把链表顺序改变,用两个指针不断地移动,改变方向,引入第三个指针保存地址,pre表示原来在前面的,cur表示现在的指针,相当于把pre->cur转换成为pre<-cur,把这两个指针看成一个整体,一次移动一个元素单位,最后面是cur指向NULL,pre就是新的链表的头节点,返回pre就可以了
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* pre=nullptr; auto cur=head; while(cur) { auto c=cur->next; cur->next=pre;//这一步是核心代码,转换链表方向 pre=cur; cur=c; } return pre; } };