合并两个排好序的单链表

//链表的结构
class LinkedList {
	int data;
	LinkedList next;
}
/**
 * 
 * 合并两个排好序的链表
 *
 */
public class UnionLinkList {
	/**
	 * 建立单链表
	 * @param head  单链表头结点
	 */
	public void createLinkedList(LinkedList head) {
		LinkedList cur = head;
		Scanner scanner = new Scanner(System.in);
		String data;
		System.out.println("输入单链表结点的值,输入#结束");
		while (true) {
			data = scanner.next();
			if (data.equals("#")) {
				cur.next = null;
				break;
			}
			LinkedList node = new LinkedList();
			node.data = Integer.valueOf(data);
			cur.next = node;
			cur = cur.next;
		}
	}
	/**
	 * 
	 * @param a                 链表a
	 * @param b	            链表b
	 * @param union	            合并后的链表
	 * @return		    合并后的链表
	 */
	public LinkedList union(LinkedList a,LinkedList b,LinkedList union){
		LinkedList pc = union = a;
		LinkedList pa = a.next;
		LinkedList pb = b.next;
		while(pa != null && pb != null){
			if(pa.data < pb.data){
				pc.next = pa;
				pc = pa;
				pa = pa.next;
			}else{
				pc.next = pb;
				pc = pb;
				pb = pb.next;				
			}
			if(pa != null){
				pc.next = pa;
			}
			if(pb != null){
				pc.next = pb;
			}
		}
		return union;
	}
	/**
	 * 打印单链表
	 * @param head   链表头指针
	 */
	public void printLinkList(LinkedList head){
		if(head == null || head.next == null){
			return;
		}
		head = head.next;
		while(head != null){
			System.out.print(head.data+" ");
			head = head.next;
		}
		System.out.println();
	}
	public static void main(String[] args) {
		UnionLinkList ull = new UnionLinkList();
		LinkedList pa = new LinkedList();
		LinkedList pb = new LinkedList();
		ull.createLinkedList(pa);
		ull.createLinkedList(pb);
		LinkedList union = null;
		union = ull.union(pa,pb, union);
		ull.printLinkList(union);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值