您的位置:首页 > Web前端

反转链表--《剑指offer》

2016-10-11 13:50 281 查看
题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

有两种解题思路:

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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息