网站建设找丿金手指排名,南昌网站建设公司渠道,五金网站模板,如何做logo标志题目
定义一个函数#xff0c;输入一个链表的头节点#xff0c;反转该链表并输出反转后链表的头节点。例如#xff0c;把图4.8#xff08;a#xff09;中的链表反转之后得到的链表如图4.8#xff08;b#xff09;所示。
分析
由于节点j的next指针指向了它的前一个节…题目
定义一个函数输入一个链表的头节点反转该链表并输出反转后链表的头节点。例如把图4.8a中的链表反转之后得到的链表如图4.8b所示。
分析
由于节点j的next指针指向了它的前一个节点i因此链表在节点j和k之间断开无法在链表中遍历到节点k。为了避免链表断开需要在调整节点j的next指针之前把节点k保存下来。
也就是说在调整节点j的next指针时除了需要知道节点j本身还需要知道节点j的前一个节点i这是因为需要把节点j的next指针指向节点i。同时还需要事先保存节点j的下一个节点k以防止链表断开。因此在遍历链表逐个反转每个节点的next指针时需要用到3个指针分别指向当前遍历到的节点、它的前一个节点及后一个节点。
解
public class Test {public static void main(String[] args) {ListNode listNode1 new ListNode(1);ListNode listNode2 new ListNode(2);ListNode listNode3 new ListNode(3);ListNode listNode4 new ListNode(4);ListNode listNode5 new ListNode(5);ListNode listNode6 new ListNode(6);ListNode listNode7 new ListNode(7);ListNode listNode8 new ListNode(8);listNode1.next listNode2;listNode2.next listNode3;listNode3.next listNode4;listNode4.next listNode5;listNode5.next listNode6;ListNode result reverseList(listNode1);while (result ! null) {System.out.println(result.val);result result.next;}}public static ListNode reverseList(ListNode head) {ListNode prev null;ListNode cur head;while (cur ! null) {ListNode next cur.next;cur.next prev;prev cur;cur next;}return prev;}
}