✨链接:数据结构-手撕单链表+代码详解。
leetcode链接:反转链表
1️⃣ 代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/*
思路1:把所给链表依次头插
*/
struct ListNode* reverseList(struct ListNode* head){
// 新的头结点
struct ListNode* newHead = NULL;
// 遍历链表
struct ListNode* cur = head;
while (cur != NULL) {
// 记录下一个位置
struct ListNode* next = cur->next;
// 头插
cur->next = newHead;
newHead = cur;
//迭代
cur = next;
}
return newHead;
}
2️⃣ 代码:
/*
思路2:改变链表的指向
*/
struct ListNode* reverseList(struct ListNode* head){
// 链表为空
if (head == NULL)
return NULL;
struct ListNode* prev = NULL;
struct ListNode* cur = head;
// 特殊情况:cur 为 NULL。 error:NULL->next
struct ListNode* next = cur->next;
while (cur != NULL) {
// 改变链表的指向
cur->next = prev;
// 迭代
prev = cur;
cur = next;
// 特殊情况:next = NULL
if (next != NULL)
next = next->next;
}
return prev;
}