题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
有两种解题思路:
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;
}
}