反转单链表(Java描述)
2016-09-05 23:50
483 查看
问题描述:
输入一个单链表,对其元素顺序进行反转后输出。
单链表节点定义:
解法一:
从头节点开始,对每一个节点的next引用的方向进行反转,直到最后一个节点结束,代码如下:
解法二:
进行如下迭代:删除头节点的后面一个节点,并加入到新链表的头部,直到头节点变成链表的最后一个节点结束。此法只涉及链表的两个基本操作:删除节点,加入节点。代码如下:
解法三:
使用递归。对头节点后面的子链表进行反转,此后头节点会指向子链表的最后一个节点,修改相关我引用使其变成尾节点:
输入一个单链表,对其元素顺序进行反转后输出。
单链表节点定义:
public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }
解法一:
从头节点开始,对每一个节点的next引用的方向进行反转,直到最后一个节点结束,代码如下:
public ListNode ReverseList(ListNode head) { if (head == null) return head; ListNode cur = head; // 当前指向节点 ListNode pre = null; // cur节点的前个一节点 ListNode tmp = null; // 辅助引用 while (cur != null) { tmp = cur.next; cur.next = pre; // 反转引用 /* 将pre、cur前移一个节点 */ pre = cur; cur = tmp; } return pre; }
解法二:
进行如下迭代:删除头节点的后面一个节点,并加入到新链表的头部,直到头节点变成链表的最后一个节点结束。此法只涉及链表的两个基本操作:删除节点,加入节点。代码如下:
public ListNode ReverseList(ListNode head) { if (head == null) // 空链表 return null; ListNode oldHead = head; while (oldHead.next != null) { // 删除原头结点的下一个节点 ListNode tmp = oldHead.next; oldHead.next = oldHead.next.next; // 将被删除节点放到链表头部 tmp.next = head; head = tmp; } return head; }
解法三:
使用递归。对头节点后面的子链表进行反转,此后头节点会指向子链表的最后一个节点,修改相关我引用使其变成尾节点:
public ListNode ReverseList(ListNode head) { if (head == null) // 输入为null return null; if (head.next == null) // 递归终止条件 return head; ListNode ptr = head; head = ReverseList(head.next); // 反转子链表 /* 头节点此时指向链表的最后一个节点,修改其next为null, 并将子链表最后一个节点指向它,头节点就变成了尾节点*/ ptr.next.next = ptr; ptr.next = null; return head; }
相关文章推荐
- Java反转单链表(code)
- Java中单链表的实现和单链表的反转(倒置)
- Java单链表反转 Java实现单链表翻转
- java实现单链表的反转
- 数据结构与算法(Java描述)-4、单链表以及单链表的应用
- Java中单链表的实现和单链表的反转(倒置)
- java反转单链表
- Java单链表基本操作(四)--单链表反转
- Java面试题之单链表反转
- 单链表反转的递归实现(Reversing a Linked List in Java, recursively)
- 【转】JAVA实现两种方法反转单链表
- 【LeetCode-面试算法经典-Java实现】【206-Reverse Linked List(反转一个单链表)】
- 【数据结构】单链表的实现(Java语言描述)
- java 实现单链表的反转
- 用Java实现单链表的反转
- Java-反转单链表
- Java 反转单链表
- Java单链表的反转
- 理解单链表的反转(java实现)
- Java 单链表的反转 以及 双向链表的实现