反转链表--《剑指offer》
2016-10-11 13:50
281 查看
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
有两种解题思路:
1.很笨的做法。先遍历链表,求出链表的长度,然后定义一个和链表长度一样的数组,把数存到这个数组中,利用这个数组反向构建这个链表。代码如下:
2.对next域的赋值,同时对下一个节点进行保存,然后对把下一个节点赋给新的节点,这样依次循环完所有的节点。每次使新插入的节点变成头第一个有效节点。
代码如下:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
有两种解题思路:
1.很笨的做法。先遍历链表,求出链表的长度,然后定义一个和链表长度一样的数组,把数存到这个数组中,利用这个数组反向构建这个链表。代码如下:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode ReverseList(ListNode head) { ListNode list1 = head; ListNode list2 = head; ListNode first = null; ListNode cur = null; int i = 0; int count = 0; if(head == null) return null; while(list1 != null){ count++; list1 = list1.next; } int[] a = new int[count]; while(list2 != null){ a[i++] = list2.val; list2 = list2.next; } for(int j = 0; j < a.length; j++){ if(first == null){ cur = new ListNode(a[j]); first = cur; } else{ cur = new ListNode(a[j]); cur.next = first; first = cur; } } return first; } }
2.对next域的赋值,同时对下一个节点进行保存,然后对把下一个节点赋给新的节点,这样依次循环完所有的节点。每次使新插入的节点变成头第一个有效节点。
代码如下:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*/ public class Solution { public ListNode ReverseList(ListNode head) { ListNode pre = null; ListNode next = null; while(head != null){ next = head.next; head.next = pre; pre = head; head = next; } return pre; } }
相关文章推荐
- (剑指Offer)面试题16:反转链表
- 剑指offer(十五)反转链表
- 剑指offer——链表的递归反转打印
- 《剑指offer》——反转链表
- 剑指Offer----反转链表
- 剑指offer13--将单向链表反转
- 剑指Offer--016-反转链表
- 《剑指offer》编程题java实现(十三):反转链表
- 剑指offer(17):反转链表
- [剑指offer学习心得]之:反转链表
- 剑指offer面试题17,18:反转链表+合并有序链表
- 《剑指Offer》读书笔记--面试题16:反转链表
- 剑指offer面试题16:反转链表
- 剑指offer 面试题16 反转链表
- 剑指offer——反转链表
- 剑指Offer(24)反转链表
- 剑指Offer系列-面试题16:反转链表
- 剑指offer-反转链表
- 剑指offer:反转链表
- JAVA实现链表的反转(《剑指offer》)