public class ReverseSingleList
{
/**
* 递归,在反转当前节点之前先反转后续节点
*
* @param head
* @return
*/
public static Node reverse(Node head)
{
if (null == head || null == head.getNextNode())
{
return head;
}
//
Node reversedHead = reverse(head.getNextNode());
//
head.getNextNode().setNextNode(head);
//
head.setNextNode(null);
return reversedHead;
}
/**
* 遍历,将当前节点的下一个节点缓存后更改当前节点指针
*
* @param head
* @param mode
* 仅用作区分于同名方法
* @return
*/
public static Node reverse(Node head, int mode)
{
if (null == head)
{
return head;
}
Node pre = head;
Node cur = head.getNextNode();
Node next;
while (null != cur)
{
next = cur.getNextNode();
cur.setNextNode(pre);
pre = cur;
cur = next;
}
// 将原链表的头节点的下一个节点置为null,再将反转后的头节点赋给head
head.setNextNode(null);
head = pre;
return head;
}
public static void main(String[] args)
{
Node head = new Node(0);
Node tmp = null;
Node cur = null;
// 构造一个长度为100的链表,保存头节点对象head
for (int i = 1; i < 100; i++)
{
tmp = new Node(i);
if (1 == i)
{
head.setNextNode(tmp);
} else
{
cur.setNextNode(tmp);
}
cur = tmp;
}
// for (int i = 0; i < 100; i++)
// {
// tmp = new Node(i);
// if (0 != i)
// {
// cur.setNextNode(tmp);
// }
// cur = tmp;
// }
head = reverse(head, 0);
//
while (null != head)
{
System.out.print(head.getPosition() + "\n");
head = head.getNextNode();
}
}
}
反转链表的Java实现
最新推荐文章于 2024-08-19 00:33:13 发布