您的位置:首页 > 其它

链表问题——两个单链表生成相加链表

2017-12-18 21:38 363 查看
【题目】

  假设链表中每一个节点的值都在0-9之间,那么链表整体就可以代表一个整数

  例如:9->3->7代表937

  给定两个这种链表的头节点head1和head2,请生成代表两个整数相加值的结果链表,并返回结果链表的头节点,注意进位问题

【代码】

//介绍两种方法,一种利用栈,一种利用逆序链表
import java.util.*;

class Node
{
public int value;
public Node next;

public Node(int data)
{
this.value = data;
}
}

class test{
//利用栈
public Node addLists1(Node head1,Node head2)
{
Stack<Integer> s1 = new Stack<Integer>();
Stack<Integer> s2 = new Stack<Integer>();
while(head1!=null)
{
s1.push(head1.value);
head1 = head1.next;
}
while(head2!=null)
{
s2.push(head2.value);
head2 = head2.next;
}

int ca = 0;  //进位
int n1 = 0;
int n2 = 0;
int n = 0;
Node node = null;
Node pre = null;

while(!s1.isEmpty() || !s2.isEmpty())
{
n1 = s1.isEmpty() ? 0 : s1.pop();
n2 = s2.isEmpty() ? 0 : s2.pop();
pre = node;
node = new Node(n%10);
node.next = pre;
ca = n/10;
}
if(ca==1)
{
pre = node;
node = new Node(1);
node.next = pre;
}
return node;
}

//利用链表逆序
public Node addList2(Node head1,Node head2)
{
head1 = reverseList(head1);
head2 = reverseList(head2);
int ca = 0;  //进位
int n1 = 0;
int n2 = 0;
int n = 0;
Node c1 = head1;
Node c2 = head2;
Node node = null;
Node pre = null;
while(c1!=null || c2!=null)
{
n1 = c1 != null ? c1.value : 0;
n2 = c2 != null ? c2.value : 0;
n = n1 + n2 + ca;
pre = node;
node = new Node(n%10);
node.next = pre;
ca = n/10;
c1 = c1 != null ? c1.next : null;
c2 = c2 != null ? c2.next : null;
}

if(ca==1)
{
pre = node;
node = new Node(1);
node.next = pre;
}

reverseList(head1);
reverseList(head2);

return node;
}

public Node reverseList(Node head)
{
Node pre = null;
Node next = null;
while(head!=null)
{
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  单链表 链表