您当前的位置: 首页 >  leetcode

星许辰

暂无认证

  • 4浏览

    0关注

    466博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

LeetCode_双指针_递归_简单_206. 反转链表

星许辰 发布时间:2022-05-21 09:38:18 ,浏览量:4

目录
  • 1.题目
  • 2.思路
  • 3.代码实现(Java)
  • 4.扩展

1.题目

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1: 在这里插入图片描述 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]

示例 2: 在这里插入图片描述 输入:head = [1,2] 输出:[2,1]

示例 3: 输入:head = [] 输出:[]

提示: 链表中节点的数目范围是 [0, 5000] -5000 null 为例: 经过 head.next.next = head 之后,得到 head->p2->head 经过 head.next = null 之后,得到 p2->head->null 这样便将 head 与 p2 进行了反转 */ head.next.next = head; head.next = null; return newHead; } }

//思路2————迭代和双指针
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
	public ListNode reverseList(ListNode head) {
		// prev 指向反转后的头结点,初始值为 null
	    ListNode prev = null;
	    // cur 指向待反转部分的头节点,初始值为 head
	    ListNode curr = head;
	    while (cur != null) {
	    	//使用 next 记录当前节点 curr 的下一个节点
	        ListNode next = curr.next;
	        curr.next = prev;
	        // cur 和 prev 均向后移动
	        prev = curr;
	        curr = next;
	    }
	    return prev;
	}
}
4.扩展

如果要逆序打印链表,则并且不能改变链表,那么其代码如下:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public static void reversePrint(ListNode head) {
        if (head == null) {
            return;
        }
        reversePrint(head.next);
        System.out.println(head.val);
    }
}
关注
打赏
1665627467
查看更多评论
立即登录/注册

微信扫码登录

0.0396s