本文已参与「新人创作礼」活动,一起开启掘金创作之路。
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
pre = null
cur = 1
cur.next修改前是2,修改后是null
pre = 1
cur = 2
依次推倒
cur.next修改前是3,修改后是2
pre = 2
cur = 3
...
题解
- 一定要定义三个节点指针
- 临时节点永远指向当前节点的下一个节点
- 循环中步骤
- 定义临时节点
- 修改cur.next指针指向,将其指向pre
- pre向后移动一位
- cur向后移动一位
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode reverseList(ListNode head) {
ListNode cur = head;
ListNode newHead = null;
while(cur != null) {
// 暂存后继节点 cur.next
ListNode next = cur.next;
// cur.next指针指向newHead
cur.next = newHead;
// 修改 next 引用指向
//newHead指针指向cur,即newHead和cur都向后移动一位
newHead = cur;
// cur 访问下一节点
cur = next;
}
return newHead;
}
}
解法二:移步到这里