反转链表实际上就是将链表中,每个节点中指向下一个节点的指针,修改为指向它的前一个节点,然后把原来的尾节点当做转换后的头节点。
下面是通过循环的方式,依次修改每个节点的下一节点指针,使用C语言实现的代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head) {
if (head == NULL) {
return NULL;
}
struct ListNode* tail = head;
while (tail->next != NULL) {
struct ListNode* current = tail->next;
tail->next = current->next;
current->next = head;
head = current;
}
return head;
}
下面是使用递归方式实现的C语言代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head) {
if (head == NULL || head->next == NULL) {
return head;
}
struct ListNode* result = reverseList(head->next);
head->next->next = head;
head->next = NULL;
return result;
}