要求:
实现反转单向链表和双向联播的函数,要求链表长度为N,时间复杂度为O(N),额外空间复杂度要求为O(1)。
实现代码:
Node.java
package algorithm_11;
public class Node {
public int value;
public Node next;
public Node(int data){
this.value = data;
}
}
DoubleNode.java
package algorithm_11;
public class DoubleNode {
public int value;
public DoubleNode last;
public DoubleNode next;
public DoubleNode(int data){
this.value = data;
}
}
Algorithm_11
package algorithm_11;
//反转单向和双向链表
public class algorithm_11 {
public static Node reverseList(Node head){
Node pre = null;
Node next = null;
while(head != null){
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
public static DoubleNode reverseList(DoubleNode head){
DoubleNode pre = null;
DoubleNode next = null;
while(head != null){
next = head.next;
head.next = pre;
head.last = next;
pre = head;
head = next;
}
return pre;
}
public static Node init(Node head){
for (int i = 2; i < 5; i++){
head.next = new Node(i);
head = head.next;
}
return head;
}
public static DoubleNode init(DoubleNode head){
for (int i = 2; i < 5; i++){
head.next = new DoubleNode(i);
head = head.next;
}
return head;
}
public static void print(Node head){
Node cur = head;
while (cur != null) {
System.out.print(cur.value + " ");
cur = cur.next;
}
System.out.print(" \n");
}
public static void print(DoubleNode head){
DoubleNode cur = head;
while (cur != null) {
System.out.print(cur.value + " ");
cur = cur.next;
}
System.out.print(" \n");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Node test = new Node(1);
init(test);
System.out.println("---Node---");
System.out.println("Before reverseList:");
print(test);
System.out.println("After reverseList:");
print(reverseList(test));
DoubleNode test2 = new DoubleNode(1);
init(test2);
System.out.println("---DoubleNode---");
System.out.println("Before reverseList:");
print(test2);
System.out.println("After reverseList:");
print(reverseList(test2));
}
}
实现结果:
---Node---
Before reverseList:
1 2 3 4
After reverseList:
4 3 2 1
---DoubleNode---
Before reverseList:
1 2 3 4
After reverseList:
4 3 2 1