问答题 写算法将单链表L1拆成两个链表,其中以L1为头的链表保持原来向后的链接,另一个链表的头为L2,其链接方向与L1相反,L1包含原链表的奇数序号的结点,L2包含原链表的偶数序号的结点。【东华大学2004三(10分)】
【正确答案】正确答案:现给出核心语句段如下: int i=0; L2:new(LNode); //i表示结点序号,增加一个表头结点L2 L2一>next=null;p=L1一>next;pre=L1; //L2偶序号链表,L1奇序号链表 while(p) (i++; if(i%2) (pre一>nex七=p;pre=p; p=p一>next;) //奇数序号结点在L1中,pre指向前驱 else(s:p一>next; //保存后继,避免断链 p一>next:L2一>next;L2一>next=p; //偶数序号结点逆置(头插法)插入L2中 p:s;) //将保存的后继恢复成当前待处理结点 p=s;; //将保存的后继恢复成当前待处理节点 } pre一>next:null ; //L1奇序号链表加上结尾标志,保证在结点个数为偶数时也正确
【答案解析】