版权声明:本文为博主原创文章,转载请注明。 https://blog.csdn.net/zhaojianyin/article/details/79089146
反转链表
package it.list;
/**
* @项目名称:util
* @类名称:Fanzhuan @类描述:反转链表
* @version 1.0
*/
public class Fanzhuan {
public static Node fanzhuanlist(Node head) {
Node pre = null;
Node next = null;
while (head != null) {
next = head.next;// 拿到下一个节点
head.next = pre;// 将当前节点next设为上一个节点
pre = head;// 将上一个节点设为头节点
head = next;// 遍历下一个节点
}
return pre;
}
public static void main(String[] args) {
Node node = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node5 = new Node(5);
node.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
Node test = fanzhuanlist(node);
while (test != null) {
System.out.println(test.value);
test = test.next;
}
}
}
反转部分链表
package it.list;
/**
* @项目名称:util
* @类名称:FanzhuanBufen @类描述:反转部分链表,从from 到 to
*
* @author 赵建银
* @date 2018年1月17日
* @time 下午6:58:08
* @version 1.0
*/
public class FanzhuanBufen {
public static Node fanzhuanlist(Node head, int from, int to) {
Node node = head;
Node fpre = null;//from节点的前一个节点
Node fpos = null;//to节点的下一个节点
int len = 0;
while (node != null) {
len++;
fpre = from - 1 == len ? node : fpre;
fpos = to + 1 == len ? node : fpos;
node = node.next;
}
if (from > to || from < 1 || from > len) {
return head;
}
node = fpre == null ? head : fpre.next;// 反转的第一个节点
Node node2 = node.next;// 反转的节点的下一个节点
node.next = fpos;//将当前头节点的下一个节点连上to的下一个节点
Node next = null;
while (node2 != fpos) {//实现反转
next = node2.next;
node2.next = node;
node = node2;
node2 = next;
}
if (fpre != null) {//如果prfe不为空说明不是第一个节点之前的节点,则不头节点不变如果为空头节点变为node
fpre.next = node;
return head;
}
return node;
}
public static void main(String[] args) {
Node node = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node5 = new Node(5);
node.next = node2;
node2.next = node3;
node3.next = node4;
node4.next = node5;
Node test = fanzhuanlist(node, 2, 4);
while (test != null) {
System.out.print(test.value + "->");
test = test.next;
}
}
}