题目链接:点击打开链接
题目大意:略。
解题思路:略。
相关企业
- 字节跳动
- 百度
- 腾讯(Tencent)
AC 代码
- Java
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ // 解决方案(1) class Solution { public ListNode reverseList(ListNode head) { if (null == head) { return null; } List<Integer> list = new ArrayList<>(); while (null != head) { list.add(head.val); head = head.next; } ListNode result = new ListNode(list.get(list.size() - 1)); ListNode tail = result; for (int i = list.size() - 2; i >= 0; i--) { result.next = new ListNode(list.get(i)); result = result.next; } return tail; } } // 解决方案(2) class Solution { public ListNode reverseList(ListNode head) { ListNode cur = head, pre = null; while(cur != null) { ListNode tmp = cur.next; // 暂存后继节点 cur.next cur.next = pre; // 修改 next 引用指向 pre = cur; // pre 暂存 cur cur = tmp; // cur 访问下一节点 } return pre; } } // 解决方案(3) class Solution { public ListNode reverseList(ListNode head) { return recur(head, null); // 调用递归并返回 } private ListNode recur(ListNode cur, ListNode pre) { if (cur == null) return pre; // 终止条件 ListNode res = recur(cur.next, cur); // 递归后继节点 cur.next = pre; // 修改节点引用指向 return res; // 返回反转链表的头节点 } }
- C++
// 解决方案(1) class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *cur = head, *pre = nullptr; while(cur != nullptr) { ListNode* tmp = cur->next; // 暂存后继节点 cur.next cur->next = pre; // 修改 next 引用指向 pre = cur; // pre 暂存 cur cur = tmp; // cur 访问下一节点 } return pre; } }; // 解决方案(2) class Solution { public: ListNode* reverseList(ListNode* head) { return recur(head, nullptr); // 调用递归并返回 } private: ListNode* recur(ListNode* cur, ListNode* pre) { if (cur == nullptr) return pre; // 终止条件 ListNode* res = recur(cur->next, cur); // 递归后继节点 cur->next = pre; // 修改节点引用指向 return res; // 返回反转链表的头节点 } };