从无头单链表中删除节点:
假设有一个没有头指针的单链表,一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个节点),请将该节点从单链表中删除。
扩展问题:编写一个函数,给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来。
public class BeautyPro34 {
/**
* @param args
*/
//狐狸换太子:把要删除的节点的下一个节点中的数据部分传递给此节点,然后再删除下一个节点。
public static void removeRandomNode(LinkedNode cur) {
LinkedNode curNext = cur.next;
if(curNext != null){
cur.next = curNext.next;
cur.val = curNext.val;
}
}
//翻转单链表
@SuppressWarnings("null")
public static LinkedNode reverseLink(LinkedNode head) {
if(head == null){
return null;
}
LinkedNode q;
LinkedNode p = null; /* 反转后头指针的next为NULL */
while(head != null){
q = head.next; //保存下一个结点
head.next = p; //next指针翻转
p = head; //后移
head = q; //后移
}
head.next = p;
return head;
}
}
class LinkedNode{
int val;
LinkedNode next;
public LinkedNode(int val, LinkedNode next) {
super();
this.val = val;
this.next = next;
}
}