单链表的反转(用循环和递归实现单链表反转)

来源:互联网 发布:windows syslog 编辑:程序博客网 时间:2024/05/17 23:03

单链表的反转,首先要考虑,如果链表是空链表或者是一个链表,则不需要反转。其次要考虑反转时,需要三个指针,分别是前一个指针,当前指针,和下一个指针。最后要把头结点指针的指向赋值null,同时头结点指针重新指向前一个指针。分别用非递归和递归实现单链表反转。

循环实现单链表反转:

package cn.edu.nwu.structs.linklist;/** * @author jcm * *时间 2016年8月23日 */public class ReverseLinkList {/** * @author jcm * 不使用递归,实现链表的反转 * @param head 头指针 * @return 返回新链表的头指针 */public static Node reverseLinkList(Node head){if(head == null || head.next == null){return head;//不需要反转}Node preNode = head;//第一个结点Node currentNode = head.next;//第二个结点Node pNextNode = null;//当前结点的下一个结点while(currentNode != null){pNextNode = currentNode.next;//备份当前结点指向的下一个结点currentNode.next = preNode;//当前结点指向前一个结点,同时当前结点已经不再指向下一个结点preNode = currentNode;//移动前一个结点,指向当前结点currentNode = pNextNode;//当前结点指向下一个结点,同时当前结点已经不再指向前一个结点}head.next = null;//头指针不再指向以前链表的第一个结点head = preNode;//头指针重新指向新链表的第一个结点return head;}
//递归实现单链表反转/** * @author jcm * @param head 头指针 * @return 返回新链表的头指针 */public static Node reverseLinkListRecursion(Node head){if(head == null || head.next == null){return head;}Node pNextNode = head.next;//下一个结点Node recursionNode = reverseLinkListRecursion(pNextNode);//递归pNextNode.next = head;head.next = null;return recursionNode;}}

假设链表是:45 98 56 12 34 1 2 3

结果输出是:3 2 1 34 12 56 98 45


0 0
原创粉丝点击