还是一如既往的链表,这个链表我一时间没有想到。
我知道用双指针,但是我想的版本是前面一个pre指针 后面一个last指针,同时遍历,知道中间的时候,也就是说中间的时候直接返回。
后来看了别人的后,改了一下思路。
我先上题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
以下是第一种思路的代码
struct ListNode* reverseList(struct ListNode* head) {
// 如果链表为空或者只有一个节点,直接返回头节点
if (head == NULL || head->next == NULL) {
return head;
}
// 递归反转除第一个节点外的其余链表
struct ListNode* newHead = reverseList(head->next);
// 将第一个节点连接到反转后的链表末尾
head->next->next = head;
head->next = NULL;
return newHead;
}
以下是第二种思路
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode* pre = NULL;
struct ListNode* cur = head;
while(cur){
struct ListNode temp = cur -> next;
cur -> next = pre;
pre = cur;
cur = temp;
}
return pre;
}

评论 (0)