通过只调整链(而不是数据)来交换两个相邻的元素,分别使用单链表和双链表
代码如下:
public class ArrayList3_2 {
// 单链表
private static class Node1<AnyType>{
public AnyType data;
public Node1<AnyType> next ;
public Node1(AnyType d, Node1<AnyType> n) {
data = d;
next = n;
}
}
public static <AnyType> void swap1(Node1<AnyType> b) {
Node1<AnyType> p, afterp;
p = b.next;
afterp = p.next;
p.next = afterp.next;
b.next = afterp;
afterp.next = p;
}
// 双链表
private static class Node2<AnyType>{
public AnyType data;
public Node2<AnyType> prev;
public Node2<AnyType> next ;
public Node2(AnyType d, Node2<AnyType> p,Node2<AnyType> n) {
data = d;
prev = p;
next = n;
}
}
public static <AnyType> void swap2(Node2<AnyType> p) {
Node2<AnyType> b, a;
b = p.prev;
a = p.next;
p.next = a.next;
b.next = a;
a.next = p;
p.next.prev = p;
p.prev = a;
a.prev = b;
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
}
}
实现MyLinkedList的contains例程
代码如下:
//one
public boolean contains(AnyType x) {
Node<AnyType> p = beginMarker.next;
while(p !=endMarker) {
if(p.data == x)
return true;
p = p.next;
}
return false;
}
/* two
public boolean contains(AnyType x) {
Node<AnyType> p = beginMarker.next;
while(p !=endMarker && !(p.data.equals(x))) {
p = p.next;
}
return p != endMarker;
}
*/