每天一个算法之链表逆序
2016-10-25 18:49
176 查看
需要4个指针,当前节点,前一个节点,后一个节点和尾节点(新头),当前节点不断后移,不断把next执行前一个
class listnode{
int data;
listnode next;
}
public class reverse {
public static void main(String args[]){
int[] n={1,3,5,7,9,11,13,15,17};
//int[] a={1,2,3,4,5,6,7,8,9};
//reorder(a);
//for(int each:a){
// System.out.print(each+" ");
//}
listnode list=CreateList(n);
listnode revlist=reverse(list);
print(revlist);
}
public static listnode CreateList(int[] n){
listnode head=new listnode();
head.data=n[0];
head.next=null;
listnode point=head;
for(int i=1;i<n.length;i++){
listnode node=new listnode();
node.data=n[i];
node.next=null;
point.next=node;
point=point.next;
}
return head;
}
public static void print(listnode l){
while(l!=null){
System.out.print(l.data+" ");
l=l.next;
}
}
public static listnode reverse(listnode list){
listnode tail=null;
listnode node=list;
listnode pre=null;
while(node!=null){
listnode next=node.next;
if(next==null)
tail=node;
node.next=pre;
pre=node;
node=next;
}
return tail;
}
}
class listnode{
int data;
listnode next;
}
public class reverse {
public static void main(String args[]){
int[] n={1,3,5,7,9,11,13,15,17};
//int[] a={1,2,3,4,5,6,7,8,9};
//reorder(a);
//for(int each:a){
// System.out.print(each+" ");
//}
listnode list=CreateList(n);
listnode revlist=reverse(list);
print(revlist);
}
public static listnode CreateList(int[] n){
listnode head=new listnode();
head.data=n[0];
head.next=null;
listnode point=head;
for(int i=1;i<n.length;i++){
listnode node=new listnode();
node.data=n[i];
node.next=null;
point.next=node;
point=point.next;
}
return head;
}
public static void print(listnode l){
while(l!=null){
System.out.print(l.data+" ");
l=l.next;
}
}
public static listnode reverse(listnode list){
listnode tail=null;
listnode node=list;
listnode pre=null;
while(node!=null){
listnode next=node.next;
if(next==null)
tail=node;
node.next=pre;
pre=node;
node=next;
}
return tail;
}
}
相关文章推荐
- 每天一个算法之合并有序链表
- 每天一个小算法(5)----找到链表倒数第K个结点
- 每天学一个算法(2)------二元查找树转变成排序的双向链表
- 每天一道算法题7 查找链表中倒数第k个结点 ; 输入一个单向链表。如果该链表的结点数为奇数,输出中间的结点;如果链表结点数为偶数,输出中间两个结点前面的一个
- 每天一个算法之链表中倒数第K个结点
- 有一个带头结点的单链表L={a1,b1,a2,b2,...,an,bn},设计一个算法将其拆分成两个带头结点的单链表A和B,正序链表A={a1,a2,a3...,an},逆序链表B={bn,bn-1,
- 每天一个小算法(3)----倒序打印链表
- 每天一个小算法(2)----合并两个有序链表
- 每天一算法(链表逆序,子字符串等几个一起)
- 每天学习一算法系列(13) (输入一个单向链表,输出该链表中倒数第k个结点)
- 每天学习一算法系列(6) (输入一个整数和一棵二元树,从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径,打印出和与输入整数相等的所有路径)
- 一些算法的复习和整理,争取每天一个算法
- 每天学习一算法系列(9) (输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果)
- 每天学习一算法系列(8) (编程判断俩个链表是否相交)
- 【每天算法2】:用java语言实现,一个组数:122345这6个数,打印出它所有可能的组合;要求4不能在第3位,3和5不能相连。
- 基本算法—链表逆序
- 每天一道算法题11 找出两个链表的第一个公共结点
- 给你一个链表和一个 random函数, 设计一个算法能随机返回链表的某个节点, 要求每个节点被返回的概率一样。限制条件是只能遍历链表一次并且不能用额外空间。
- 每天学习一算法系列(14) (输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字)
- 【每天算法1】:用java 语言实现,输入一个数,就相应地输出的几维数组