链表题目画图解决
解法一:定义一个指向NULL的新链表new_head,让head逐步指向new_head,实现反转(代入具体的数据理解)
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* new_head = NULL;
while(head){
ListNode *p=head->next; //保存head的下一个
head->next = new_head;//让当前的head指向new_head
new_head = head;//new_head 移动到head位置
head = p;//head移动到head的下一个
}
return new_head;
}
};
解法二:力扣上的代码,所谓双指针方法,实际上和解法一是一样的
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* cur = NULL, *pre = head;
while (pre != NULL) {
ListNode* t = pre->next;
pre->next = cur;
cur = pre;
pre = t;
}
return cur;
}
};
上面是双指针代码,实际上和解法一是一样的,只不过将head定义成了指针,实际上不需要,head本身就是指针
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* new_head = NULL; //双指针逐步移动
while(head){
ListNode*t = head->next; //保存head的下一个
head->next = new_head; //让当前head指向new_head,第一次循环时就是指向空
new_head = head;//让new_head移动到当前head的位置
head = t;//head移动到下一个head的位置
}
return new_head;
}
};