JZ15 反转链表
原题链接
描述
输入一个链表,反转链表后,输出新链表的表头。
示例
输入:{1,2,3}
返回值:{3,2,1}
思路
要把链表反转,就是把从第一个结点开始遍历,依次把每个结点放在当前链表中的头结点位置,保证每次处理的结点之前子的链表是已经反转了的,直到遍历完为止。
作图的话就是这样。0号结点是为了便于处理新建的附加头节点,如果要把2号结点放在当前链表的头结点位置,首先要保存附加头节点后面的内容,然后让附加头结点指向2号结点,2号结点再指向刚刚保存的附加头结点后面的内容,也就是已经反转过的链表。

解答
public class Solution {
public static ListNode ReverseList(ListNode head) {
ListNode cur = head;
ListNode pro = new ListNode(-1);
while (cur != null){
ListNode phead = cur;//要插到头结点的结点
cur = cur.next;
ListNode tmp = pro.next;
pro.next = phead;
phead.next = tmp;
}
return pro.next;
}
}
解答
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null) return null;
ListNode addHead = new ListNode(-1);
addHead.next = head;
ListNode pre = head, cur = head.next;
while (cur != null) {
pre.next = cur.next;
cur.next = addHead.next;
addHead.next = cur;
cur = pre.next;
}
return addHead.next;
}
}
本文来自博客园,作者:klaus08,转载请注明原文链接:https://www.cnblogs.com/klaus08/p/15104986.html

JZ15 反转链表
浙公网安备 33010602011771号