暂时接触到LeetCode上与链表反转相关的题目一共有3道,在这篇博文里面总结一下。首先要讲一下我一开始思考的误区:链表的反转,不是改变节点的位置,而是改变每一个节点next指针的指向。
下面直接看看LeetCode上的题目:
206. Reverse Linked List
这是一道最基本的链表反转题目。
/** * 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) { if (head == NULL || head->next == NULL) return head; ListNode *p = head; ListNode *q = head->next; head->next = NULL; while (q) { ListNode *r = q->next; q->next = p; p = q; q = r; } return p; } };