您的位置:首页 > Web前端 > Node.js

leetcode24:Swap Nodes in Pairs

2017-01-04 09:33 423 查看

Swap Nodes in Pairs

Given a linked list, swap every two adjacent nodes and return its head.

For example,

Given
1->2->3->4
, you should return the list as
2->1->4->3
.

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

做题最重要的是思路清晰,思考全面,妈的!这一次又充分体会到了头结点的好处,拥有头结点可以简化操作。

分三种情况:下一组节点不存;下一组节点只有一个节点;下一组节点存在,有两个节点。

public class leet24 {

private class ListNode{
int val;
ListNode next;
ListNode(){};
ListNode(int x){ val = x;}
}

public static void main(String[] args) {

leet24 leet = new leet24();

ListNode head = new leet24().new ListNode();
ListNode l1 = new leet24().new ListNode(1);
ListNode l2 = new leet24().new ListNode(2);
ListNode l3 = new leet24().new ListNode(3);
ListNode l4 = new leet24().new ListNode(4);
ListNode l5 = new leet24().new ListNode(5);
ListNode l6 = new leet24().new ListNode(6);

head.next = l1;
l1.next = l2;
l2.next = l3;
l3.next = l4;
l4.next = l5;
l5.next = l6;

ListNode result = leet.swapPairs(head);
while(result.next != null){
System.out.println(result.next.val);
result = result.next;
}
}
public ListNode swapPairs(ListNode head){

ListNode first = head.next;//组内第一个节点
ListNode second = first.next;//组内第二个节点
ListNode nextPairs = second.next;//下一组第一个节点
head.next = second;//设置头结点
while(first != null && second != null ){

second.next = first;//第二个节点的后继指向第一个节点
//当前第一个节点的的后继,的指向则要根据具体情况具体分析
if(nextPairs == null){//如果下一组节点不存在,则节点,最后的节点指向空
first.next = null;
return head;//结束,返回
}else if(nextPairs.next == null){//此时下一组节点存在,且只有一个节点
first.next = nextPairs;//前一组的最后一个节点的后继,指向下一组的第一个节点
return head;//结束
}else {//下一组节点存在,有两个节点
first.next = nextPairs.next;//第二个节点的后继指向下一组的第二个节点
}
first = nextPairs;//平移指针
second = nextPairs.next;
nextPairs = second.next;
}
return head;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: