[剑指offer][Java]反转链表
2019-06-20 本文已影响0人
Maxinxx
题目
输入一个链表,反转链表后,输出新链表的表头。
程序核心思想
因为要使一个结点的next指针指向它前面的结点,就需要一个或两个指针来记录这两个结点(一个也行?a.next.next = a),但是一定需要再加一个指针来记录这个结点——它的next结点指向上一个结点(如果不多加一个指针,会失去它原来next指针指向的下一个结点的信息)——的下一个结点。然后分别移动一位,修改指向即可。
Tips
无
代码
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null) return null;
ListNode a = head;
ListNode b;
ListNode c;
if(a.next != null){
b = a.next;
}else{
return a;
}
if(b.next != null){
c = b.next;
}else{
b.next = a;
a.next = null;
return b;
}
a.next = null;
while(c != null){
b.next = a;
a = b;
b = c;
c = c.next;
}
b.next = a;
return b;
}
}