一、题目描述如下:
二、题目链接:
力扣 209 长度最小的子数组 链接:link
三、解题思路:
- 思路一:用三个指针直接在当前链表上操作,每次将
n2->next
的值改成n1
,不断往后迭代,直到n2
为空。
代码实现如下:
struct ListNode* reverseList(struct ListNode* head){
if (head == NULL)
return NULL;
// 思路1:用三个指针来改变链表的指向
struct ListNode* n1 = NULL, *n2 = head, *n3 = head->next;
while (n2 != NULL)
{
n2->next = n1;
n1 = n2;
n2 = n3;
if (n3 != NULL) // 注意判断 n3 为空的情况
n3 = n3->next;
}
return n1;
}
- 思路二:从原链表中依次取下节点在新链表中进行头插。
指针移动变化的过程如下:
指针移动变化的过程如下:
代码实现如下:
struct ListNode* reverseList(struct ListNode* head){
// 思路二: 将每个节点拿下来头插
struct ListNode* cur = head, * newhead = NULL;
while (cur != NULL)
{
struct ListNode* next = cur->next; // 记录下一个节点
// 头插
cur->next = newhead;
newhead = cur;
// 迭代
cur = next;
}
return newhead;
}
四、总结
数据结构的题目,应该多画图去分析,增强自己调试代码的能力。