/* * @lc app=leetcode.cn id=206 lang=c * * [206] 反转链表 * * https://leetcode-cn.com/problems/reverse-linked-list/description/ * * algorithms * Easy (58.89%) * Total Accepted: 41.2K * Total Submissions: 69.9K * Testcase Example: '[1,2,3,4,5]' * * 反转一个单链表。 * * 示例: * 输入: 1->2->3->4->5->NULL * 输出: 5->4->3->2->1->NULL * * 进阶: * 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? * */ /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* reverseList(struct ListNode* head) { struct ListNode* p = head; struct ListNode *q = NULL; if(head==NULL||head->next==NULL) { return head; } while(p!=NULL){ struct ListNode *temp; temp = p->next; p->next=q; q = p; p = temp; } return q; }
这里设置了三个listnode指针变量。 如果比较难理解的话画个图就会好懂很多。
-----------------------------------------------------------------------------------------------------
python:
# # @lc app=leetcode.cn id=206 lang=python3 # # [206] 反转链表 # # https://leetcode-cn.com/problems/reverse-linked-list/description/ # # algorithms # Easy (58.89%) # Total Accepted: 41.2K # Total Submissions: 69.9K # Testcase Example: '[1,2,3,4,5]' # # 反转一个单链表。 # # 示例: # # 输入: 1->2->3->4->5->NULL # 输出: 5->4->3->2->1->NULL # # 进阶: # 你可以迭代或递归地反转链表。你能否用两种方法解决这道题? # # # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: def reverseList(self, head: ListNode) -> ListNode: if head is None: return None cur = head pre = None nxt = cur.next while nxt: cur.next = pre pre = cur cur = nxt nxt = nxt.next cur.next = pre head = cur return head