反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
通过次数283,901提交次数406,363
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* 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* dhead=new ListNode();
ListNode* sc=head;
while(sc){
ListNode* tmp=new ListNode(sc->val);
tmp->next= dhead->next;
dhead->next=tmp;
sc=sc->next;
}
return dhead->next;//因为是带有头节点的 所以要返回dhead->next
}
};
迭代法 法二
/**
* 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) {//不断迭代
if(!head||head->next==NULL){
return head;
}
ListNode* oldNode=head;
ListNode* newNode=NULL;
while(oldNode){
ListNode* tmp=oldNode->next;
oldNode->next= newNode;
newNode=oldNode;
oldNode=tmp;
}
return newNode;
}
};