码字不易,记得点赞加收藏
题目:输入一个链表,反转链表后,输出新链表的表头。
解答:例如:输入1->5->6-->8->null,期待输出8->6->5->1-null
1.定义一个ListNode pre = null; ListNode next = null; 定义一个前向节点指向null,一个后向节点指向空
2.
第一轮:
当前pre = null,next = null,head = 1
next = head..next (head = 1,next = 5)
head.next = pre (head.next = null)1->null
pre = head (pre = 1)
head = next (head = 5)
第二轮:
当前:pre = 1,next = 5,head 5
next = head..next (head = 5,next = 6)
head.next = pre (head.next = 1)5->1->null(此时的1就是head.next,所以指向只能这样)
pre = head (pre = 5)
head = next (head = 6)
第三轮:
当前:pre = 5;next =6;head = 6;
next = head.next (head = 6,next = 8)
head.next = pre (head.next = 5)6->5->1->null(此时的5就是head.next,所以指向只能这样)
pre = head (pre = 6)
head = next (head = 8)
第四轮:
当前:pre = 6;next =8;head = 8;
next = head.next (head = 8,next = null)
head.next = pre (head.next = 6)8->6>5->1->null(此时的6就是head.next,所以指向只能这样)
pre = head (pre = 8)
head = next (head = null)此时结束循环,反向链表生成,返回头结点pre
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode pre = null;
ListNode next = null;
while(head != null){
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
}