题目:
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
思路:
①不断遍历链表,将链表中的元素添加到新的链表中去。
②可以用两个指针, pre 和 cur 。其中 cur 指向 head,不断遍历 cur。每次迭代到 cur,都将 cur 的 next 指向 pre,然后 pre 和 cur 前进一位。
③递归。
代码:
方法一:头插法
public ListNode reverseList(ListNode head) {
ListNode dummyHead = new ListNode();
// 边遍历原链表,边新建节点头插入新链表
while (head != null) {
ListNode node = new ListNode(head.val);
node.next = dummyHead.next;
dummyHead.next = node;
head = head.next;
}
return dummyHead.next;
}
方法二:双指针迭代法
动态图解: