这道题我可能太久没做或者反转字符串做多了,魔怔了,居然想着双指针一个在头一个在尾巴,然后逐步逼近中间交换了。。一个不难的题目就魔怔了。当然,后面做得出来,就是特别粗爆。用了个数组。。。。可以看看这近乎无语的解法
public ListNode reverseList(ListNode head) {
if(head==null)return null;
ListNode last=head;
int cnt=0;
while(last!=null){
last=last.next;
cnt++;
}
last=head;
ListNode[] memo=new ListNode[cnt];
int i=0;
while(last!=null){
memo[i]=last;
last=last.next;
i++;
}
for(int j=cnt-1;j>0;j--){
memo[j].next=memo[j-1];
}
memo[0].next = null;
return memo[cnt-1];
}
其实没那么复杂啊!
比如1>2>3
不就是先转1和2,变成<1<2 然后最后3>2>1而已啊!不要去想复杂了啊喂!
ListNode end = null;
ListNode next = head;
ListNode pre = null;
while(head!=null){
pre = head;
next =head.next;
head.next=end;
end = head;
head = next;
}
return pre;
这反而题做多了有时候把自己误导了,当然其实也没做多少。。只怪自己蔡。