链表逆序 (选自LeetCode206)
已知链表头节点指针head,将链表逆序。(不可申请额外空间)
图1.链表逆序
拆解链表逆序的过程:
/**
* 就地逆转法
*
*/
/**
* 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 *New_head = NULL; //指向新链表头节点的指针,就地逆值法
while(head){
ListNode *next = head->next;
head->next = New_head;
New_head = head;
head = next;
}
return New_head;
}
};
/**
* 头插法
/**
* 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 temp_head(0); //头插法
while(head){
ListNode *next;
next = head->next;
head->next = temp_head.next;
temp_head.next = head;
head = next;
}
return temp_head.next;
}
};
搜索公众号:ai_works,获取更多机器学习资讯:
长按二维码,关注:机器学习AI工场