反转链表
题目
描述
输入一个链表,反转链表后,输出新链表的表头。
示例1
输入:
{1,2,3}
复制
返回值:
{3,2,1}
答案一:
//节点实现
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
//反转实现 递归 类似冒泡排序
public static ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode temp = head.next;
ListNode newHead = reverseList(head.next);
temp.next = head;
head.next = null;
return newHead;
}
答案二:
//节点实现
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
//反转实现 指针偏移
public ListNode reverseList(ListNode head) {
if (head == null) {
return head;
}
ListNode pre = head;
ListNode cur = head.next;
ListNode temp;
while (cur != null) {
temp = cur.next;
cur.next = pre;
pre = cur;
cur = temp;
}
head.next = null;
return pre;
}