反转一个单链表
例:
原链表:1–>2–>3–>4–>null
反转后:4–>3–>2–>1–>null
解析:
(1):
不断从原来链表中取出结点,头插到一个新链表上
1).需要一个新的链表,并且是一个空链表
Node result = null; //result 新链表的第一个结点的引用
2).遍历原来的链表
Node cur = head;
while(cur != null){
cur = cur.next;
}
3).把每个遍历到的结点(cur),头插到新链表(result代表中)
<1>.已经有结点
<2>.cur.next = result;
<3>.更新最新的第一个结点 result = cur;
class Solution {
public ListNode reverseList(ListNode head) {
ListNode result = null;
ListNode cur = head;
while (cur != null) {
ListNode next = cur.next;
cur.next = result;
result = cur;
cur = next;
}
return result;
}
}
(2):
(1).p2.next=p1;
(2).p1=p2;
p2=p3;
p3=p3.next; //注意 p3.next 为空时的情况
class Solution {
public ListNode reverseList(ListNode head) {
if (head == null) {
return null;
}
ListNode p1 = null;
ListNode p2 = head;
ListNode p3 = head.next;
while (p2 != null) {
p2.next = p1;
p1 = p2;
p2 = p3;
if (p3 != null) {
p3 = p3.next;
}
}
return p1;
}
}