单链表的应用

来源:互联网 发布:linux grep查找字符串 编辑:程序博客网 时间:2024/06/14 17:40

就地逆置——头插法

有一个线性表采用带头节点的单链表存储,采用就地算法将其就地逆置。

思路:

使用p指针扫描原单链表,现将头节点的next置为空,然后将其他节点采用头插法插入。

//就地逆置单链表,“就地”的意思是辅助空间为O(1)public void reverse(LinkList L){Node p=L.head.next;Node q;L.head.next=null;while(p!=null){q=p.next;p.next=head;head=p;p=q;}}

将一个线性表拆成两个线性表——尾插法

思路:原链表lc的第一个节点作为la的头节点,第二个节点作为lb的头节点。分别两个链表的尾指针ra,rb,将lc中的奇数序号的节点插入la,偶数序号的节点插入lb

public void spilt(LinkList lc,LinkList la,LinkList lb){int i=0;la.head=lc.head;Node ra=la.head;lb.head=lc.head.next;Node rb=lb.head;Node p=lc.head.next;Node q;while(p!=null){q=p.next;if(i%2!=0){ra.next=p;ra=p;}else{rb.next=p;rb=p;}p=q;i++;}ra.next=null;rb.next=null;la.showList();lb.showList();}

对单链表L进行调整,使得所有偶数序号项排在基数序号项之前

思路:通过扫描L的所有节点,将其拆分成两个单链表la和lb,一个用来存放L偶数序号的节点,另一个用来存放L奇数序号的节点,最后将la和lb连接起来。

//将所有偶数项排到奇数项之前public void sort(LinkList L){LinkList la=new LinkList(); //用来存放所有奇数序号的节点LinkList lb=new LinkList(); //用来存放所有偶数序号的节点la.head=L.head.next;Node ra=la.head;lb.head=L.head;Node rb=lb.head;Node p=L.head;Node q;int i=0;while(p!=null){q=p.next;if(i%2!=0){ra.next=p;ra=p;}else{rb.next=p;rb=p;}p=q;i++;}ra.next=null;rb.next=la.head;lb.showList();}


0 0
原创粉丝点击