剑指offer每日一题算法题(java解法)
方便日后复习,从今天开始。
算法之行始于足下
[编程题]反转链表-- Java实现
------------------------------------------------------------------------------------------------------
题目描述
输入一个链表,反转链表后,输出新链表的表头
解题思路:
1.先判断链表是否为空
2.不为空的话,创建两个指针,p和q一个p拿来存分离的节点指针,和一个q来存原链表.
3.1>2>3>4>5 被分为1 2>3>4>5 head为q(1)的next和q,p同为1,
然后第二遍为q去等于head然后搭上2>3>4>5 ,循环head为q(2)的next
然后q的next等于p,就等于把q跟p的链表头指针连接上,再把p=q,这样下次q再关联过来又是头指针
/*
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 p=null;
ListNode q=null;
while(head!=null){
q=head;
head=q.next;
q.next=p;
p=q;
}
return p;
}
}